diff --git a/.github/actionlint.yaml b/.github/actionlint.yaml
index 33ab609d9..248e5ceb3 100644
--- a/.github/actionlint.yaml
+++ b/.github/actionlint.yaml
@@ -1,5 +1,6 @@
self-hosted-runner:
labels:
+ - blacksmith-2vcpu-ubuntu-2404
- blacksmith-4vcpu-ubuntu-2404
- blacksmith-8vcpu-ubuntu-2404
- arm-runner
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 6b3efff62..528344cd8 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -12,6 +12,7 @@ on:
- "mix.lock"
- "Dockerfile"
- "run.sh"
+ - "mise.toml"
- "test/e2e/nix-build.sh"
- ".github/workflows/**"
- ".github/actionlint.yaml"
@@ -24,8 +25,11 @@ concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
+env:
+ POSTGRES_IMAGE: supabase/postgres:17.6.1.074
+
jobs:
- tests:
+ lint:
name: Lint
runs-on: blacksmith-4vcpu-ubuntu-2404
@@ -75,6 +79,55 @@ jobs:
- name: Run dialyzer
run: mix dialyzer
+ tenant-db-baseline:
+ name: Check Tenant DB baseline
+ runs-on: blacksmith-2vcpu-ubuntu-2404
+
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - name: Setup mise
+ uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1
+ - name: Cache Mix
+ uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
+ with:
+ path: |
+ deps
+ _build
+ key: ${{ github.workflow }}-${{ runner.os }}-mix-${{ env.elixir }}-${{ env.otp }}-${{ hashFiles('**/mix.lock') }}
+ restore-keys: |
+ ${{ github.workflow }}-${{ runner.os }}-mix-${{ env.elixir }}-${{ env.otp }}-
+
+ - name: Install dependencies
+ run: mix deps.get
+
+ - name: Cache Docker images
+ uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
+ id: docker-cache
+ with:
+ path: /tmp/docker-images
+ key: docker-images-zstd-${{ env.POSTGRES_IMAGE }}
+ - name: Load Docker images from cache
+ if: steps.docker-cache.outputs.cache-hit == 'true'
+ run: zstd -d --stdout /tmp/docker-images/postgres.tar.zst | docker image load
+ - name: Pull and save Docker images
+ if: steps.docker-cache.outputs.cache-hit != 'true'
+ run: |
+ docker pull ${{ env.POSTGRES_IMAGE }}
+ mkdir -p /tmp/docker-images
+ docker image save ${{ env.POSTGRES_IMAGE }} | zstd -T0 -o /tmp/docker-images/postgres.tar.zst
+ - name: Start Postgres
+ run: docker compose -f compose.dbs.yml up -d --wait
+ - name: Set up realtime DB and migrate tenant DB
+ run: mix ecto.setup
+ - name: Regenerate baseline snapshot
+ run: mix realtime.export_tenant_db_baseline
+ - name: Check baseline is up to date
+ run: |
+ if ! git diff --exit-code priv/repo/tenant_db_baseline.json; then
+ echo "::error file=priv/repo/tenant_db_baseline.json::Baseline snapshot is stale. Run 'mix realtime.export_tenant_db_baseline' locally and commit the result."
+ exit 1
+ fi
+
actionlint:
name: Actionlint
runs-on: blacksmith-4vcpu-ubuntu-2404
diff --git a/Dockerfile b/Dockerfile
index a69e46d36..f02bd9a59 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,6 +3,41 @@ ARG OTP_VERSION=27.3
ARG DEBIAN_VERSION=bookworm-20250929-slim
ARG BUILDER_IMAGE="hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-debian-${DEBIAN_VERSION}"
ARG RUNNER_IMAGE="debian:${DEBIAN_VERSION}"
+# @supabase/pg-delta@1.0.0-alpha.24
+ARG PG_DELTA_COMMIT=102ef99ae5aabb29510d48b39fbb8ecee34f5458
+
+FROM debian:${DEBIAN_VERSION} AS pgdelta-builder
+ARG PG_DELTA_COMMIT
+ARG BUN_VERSION=1.3.14
+
+RUN set -eux; \
+ apt-get update -y; \
+ apt-get install -y --no-install-recommends curl ca-certificates unzip xz-utils; \
+ curl -fsSL https://bun.sh/install | bash -s "bun-v${BUN_VERSION}"; \
+ export PATH="/root/.bun/bin:${PATH}"; \
+ mkdir -p /build && cd /build; \
+ curl -fsSL "https://github.com/supabase/pg-toolbelt/archive/${PG_DELTA_COMMIT}.tar.gz" \
+ | tar xz --strip-components=1; \
+ bun install --frozen-lockfile --ignore-scripts; \
+ cd /build/packages/pg-delta; \
+ bun build --compile src/cli/bin/cli.ts --outfile /tmp/pgdelta; \
+ /tmp/pgdelta --help > /dev/null; \
+ xz -9 -e -T0 -c /tmp/pgdelta > /tmp/pgdelta.xz; \
+ cd / && find build -path '*/@libpg-query/parser/wasm/libpg-query.wasm' \
+ | tar -czf /tmp/libpg-query.tar.gz -T -; \
+ printf '%s\n' \
+ '#!/bin/sh' \
+ 'set -e' \
+ 'BIN=/app/.pgdelta-cache/pgdelta' \
+ 'if [ ! -x "$BIN" ]; then' \
+ ' mkdir -p "$(dirname "$BIN")"' \
+ ' xz -dcT0 /usr/local/share/pgdelta/pgdelta.xz > "$BIN"' \
+ ' chmod +x "$BIN"' \
+ 'fi' \
+ 'exec "$BIN" "$@"' \
+ > /tmp/pgdelta-wrapper; \
+ chmod +x /tmp/pgdelta-wrapper; \
+ rm -rf /tmp/pgdelta /build /root/.bun /var/lib/apt/lists/*
FROM ${BUILDER_IMAGE} AS builder
@@ -75,15 +110,21 @@ ENV SLOT_NAME_SUFFIX="${SLOT_NAME_SUFFIX}" \
ERL_AFLAGS="-proto_dist inet6_tcp"
RUN apt-get update -y && \
- apt-get install -y libstdc++6 openssl libncurses5 locales iptables sudo tini curl awscli jq && \
- apt-get clean && rm -f /var/lib/apt/lists/*_*
+ apt-get install -y --no-install-recommends \
+ libstdc++6 openssl libncurses5 locales iptables sudo tini curl awscli jq xz-utils && \
+ apt-get clean && rm -rf /var/lib/apt/lists/*
+
+COPY --from=pgdelta-builder /tmp/pgdelta.xz /usr/local/share/pgdelta/pgdelta.xz
+COPY --from=pgdelta-builder /tmp/pgdelta-wrapper /usr/local/bin/pgdelta
+COPY --from=pgdelta-builder /tmp/libpg-query.tar.gz /tmp/libpg-query.tar.gz
+RUN tar -C / -xzf /tmp/libpg-query.tar.gz && rm /tmp/libpg-query.tar.gz
# Set the locale
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen
WORKDIR "/app"
-RUN chown nobody /app
+RUN chown nobody /app && mkdir -p /app/.pgdelta-cache && chown nobody /app/.pgdelta-cache
COPY --from=builder --chown=nobody:root /app/_build/${MIX_ENV}/rel/realtime ./
COPY run.sh run.sh
diff --git a/lib/mix/tasks/realtime.export_tenant_db_baseline.ex b/lib/mix/tasks/realtime.export_tenant_db_baseline.ex
new file mode 100644
index 000000000..b2621d1e3
--- /dev/null
+++ b/lib/mix/tasks/realtime.export_tenant_db_baseline.ex
@@ -0,0 +1,74 @@
+defmodule Mix.Tasks.Realtime.ExportTenantDbBaseline do
+ @shortdoc "Regenerate priv/repo/tenant_db_baseline.json"
+
+ @moduledoc """
+ Writes the baseline catalog snapshot at `priv/repo/tenant_db_baseline.json`
+ used by `RealtimeWeb.Dashboard.TenantMigrations` to detect drifted DB state.
+
+ Usage:
+
+ mix realtime.export_tenant_db_baseline
+
+ The target DB is read from `DB_HOST` / `DB_PORT` / `DB_NAME` / `DB_USER` /
+ `DB_PASSWORD` env vars.
+
+ The target DB is expected to already have all tenant migrations applied.
+
+ Requires `pgdelta` on `$PATH`.
+ """
+ use Mix.Task
+
+ @baseline_path "priv/repo/tenant_db_baseline.json"
+
+ @impl Mix.Task
+ def run(_args) do
+ url = build_url_from_env()
+ Mix.shell().info("[export_tenant_db_baseline] target: #{redact(url)}")
+
+ unless System.find_executable("pgdelta") do
+ Mix.raise("pgdelta not found on PATH")
+ end
+
+ output = Path.expand(@baseline_path, File.cwd!())
+ args = ["catalog-export", "--target", url, "--output", output]
+
+ case System.cmd("pgdelta", args, stderr_to_stdout: true) do
+ {output_str, 0} ->
+ validate_snapshot!(output)
+ Mix.shell().info(output_str)
+
+ {output_str, code} ->
+ Mix.raise("pgdelta catalog-export exited #{code}:\n#{output_str}")
+ end
+ end
+
+ defp build_url_from_env do
+ host = System.get_env("DB_HOST", "127.0.0.1")
+ port = System.get_env("DB_PORT", "5433")
+ name = System.get_env("DB_NAME", "postgres")
+ user = System.get_env("DB_USER", "supabase_admin")
+ password = System.get_env("DB_PASSWORD", "postgres")
+
+ "postgresql://#{URI.encode_www_form(user)}:#{URI.encode_www_form(password)}@#{host}:#{port}/#{name}"
+ end
+
+ defp validate_snapshot!(path) do
+ with {:ok, content} <- File.read(path),
+ {:ok, _} <- Jason.decode(content) do
+ :ok
+ else
+ _ -> Mix.raise("baseline snapshot at #{path} is invalid")
+ end
+ end
+
+ defp redact(url) do
+ case URI.parse(url) do
+ %URI{userinfo: nil} = u ->
+ URI.to_string(u)
+
+ %URI{userinfo: userinfo} = u ->
+ user = userinfo |> String.split(":", parts: 2) |> hd()
+ URI.to_string(%{u | userinfo: "#{user}:***"})
+ end
+ end
+end
diff --git a/lib/realtime_web/dashboard/tenant_info.ex b/lib/realtime_web/dashboard/tenant_info.ex
index 1aab26835..7e6d4ebba 100644
--- a/lib/realtime_web/dashboard/tenant_info.ex
+++ b/lib/realtime_web/dashboard/tenant_info.ex
@@ -4,16 +4,21 @@ defmodule RealtimeWeb.Dashboard.TenantInfo do
Secrets (jwt_secret and encrypted extension fields) are never displayed.
"""
use Phoenix.LiveDashboard.PageBuilder
+ use Realtime.Logs
alias Realtime.Api
+ alias Realtime.Api.Tenant
alias Realtime.Crypto
+ alias Realtime.Database
+
+ @application_name "realtime_dashboard_tenant_info"
@impl true
def menu_link(_, _), do: {:ok, "Tenant Info"}
@impl true
def mount(_params, _, socket) do
- {:ok, assign(socket, external_id: "", tenant: nil, error: nil)}
+ {:ok, assign(socket, external_id: "", tenant: nil, pg_version: nil, error: nil)}
end
@impl true
@@ -21,13 +26,22 @@ defmodule RealtimeWeb.Dashboard.TenantInfo do
ref = String.trim(ref)
case Api.get_tenant_by_external_id(ref) do
- nil -> {:noreply, assign(socket, external_id: ref, tenant: nil, error: "Tenant not found")}
- tenant -> {:noreply, assign(socket, external_id: ref, tenant: prepare_tenant(tenant), error: nil)}
+ nil ->
+ {:noreply, assign(socket, external_id: ref, tenant: nil, pg_version: nil, error: "Tenant not found")}
+
+ %Tenant{} = tenant ->
+ {:noreply,
+ assign(socket,
+ external_id: ref,
+ tenant: prepare_tenant(tenant),
+ pg_version: fetch_pg_version(tenant),
+ error: nil
+ )}
end
end
def handle_params(_params, _uri, socket) do
- {:noreply, assign(socket, external_id: "", tenant: nil, error: nil)}
+ {:noreply, assign(socket, external_id: "", tenant: nil, pg_version: nil, error: nil)}
end
@impl true
@@ -84,6 +98,22 @@ defmodule RealtimeWeb.Dashboard.TenantInfo do
+
Database
+
+
+
+ postgres_version
+
+ <%= case @pg_version do %>
+ <% nil -> %>
+ <% {:ok, version} -> %><%= version %>
+ <% {:error, msg} -> %><%= msg %>
+ <% end %>
+
+
+
+
+
<%= for ext <- @tenant.extensions do %>
Extension: <%= ext.type %>
@@ -133,6 +163,18 @@ defmodule RealtimeWeb.Dashboard.TenantInfo do
%{ext | settings: settings}
end
+ defp fetch_pg_version(%Tenant{} = tenant) do
+ with {:ok, settings} <- Database.from_tenant(tenant, @application_name, :stop),
+ {:ok, conn} <- Database.connect_db(settings),
+ {:ok, %{rows: [[version]]}} <- Postgrex.query(conn, "SELECT version()", []) do
+ {:ok, version}
+ else
+ {:error, reason} ->
+ log_warning("TenantInfoPgVersionFailed", reason)
+ {:error, "Failed to query postgres version: #{inspect(reason)}"}
+ end
+ end
+
defp resolve_host(host) do
host_charlist = String.to_charlist(host)
diff --git a/lib/realtime_web/dashboard/tenant_migrations.ex b/lib/realtime_web/dashboard/tenant_migrations.ex
new file mode 100644
index 000000000..d49e3e419
--- /dev/null
+++ b/lib/realtime_web/dashboard/tenant_migrations.ex
@@ -0,0 +1,351 @@
+defmodule RealtimeWeb.Dashboard.TenantMigrations do
+ @moduledoc """
+ Live Dashboard page to inspect tenant migrations state.
+
+ Requires `pgdelta` on `$PATH`.
+
+ Regenerate the baseline with `mix realtime.export_tenant_db_baseline`.
+ """
+ use Phoenix.LiveDashboard.PageBuilder
+ use Realtime.Logs
+
+ alias Realtime.Api
+ alias Realtime.Api.Tenant
+ alias Realtime.Database
+
+ @pg_delta_filter ~s({"and": [{"*/schema": "realtime"}, {"not": {"table/is_partition": true}}]})
+ @application_name "realtime_dashboard_tenant_migrations"
+ @query_timeout 30_000
+ @schema_migrations_query "SELECT version, inserted_at FROM realtime.schema_migrations ORDER BY version DESC"
+
+ @impl true
+ def menu_link(_, _), do: {:ok, "Tenant Migrations"}
+
+ @impl true
+ def mount(_params, _session, socket) do
+ {:ok,
+ assign(socket,
+ external_id: "",
+ tenant: nil,
+ schema_migrations: nil,
+ pg_delta: nil,
+ error: nil
+ )}
+ end
+
+ @impl true
+ def handle_params(%{"external_id" => ref}, _uri, socket) when ref != "" do
+ ref = String.trim(ref)
+
+ with %Tenant{} = tenant <- Api.get_tenant_by_external_id(ref),
+ {:ok, settings} <- Database.from_tenant(tenant, @application_name, :stop),
+ {:ok, db_conn} <- Database.connect_db(settings) do
+ {:noreply,
+ assign(socket,
+ external_id: ref,
+ tenant: tenant,
+ schema_migrations: fetch_schema_migrations(db_conn),
+ pg_delta: run_pg_delta(settings),
+ error: nil
+ )}
+ else
+ nil ->
+ {:noreply, assign_error(socket, ref, "Tenant not found")}
+
+ {:error, reason} ->
+ log_warning("TenantMigrationsConnectFailed", reason)
+ {:noreply, assign_error(socket, ref, "Failed to connect to tenant DB: #{inspect(reason)}")}
+ end
+ end
+
+ def handle_params(_params, _uri, socket) do
+ {:noreply,
+ assign(socket,
+ external_id: "",
+ tenant: nil,
+ schema_migrations: nil,
+ pg_delta: nil,
+ error: nil
+ )}
+ end
+
+ @impl true
+ def handle_event("lookup", %{"external_id" => ref}, socket) do
+ ref = String.trim(ref)
+ {:noreply, push_patch(socket, to: "/admin/dashboard/tenant_migrations?external_id=#{URI.encode(ref)}")}
+ end
+
+ @impl true
+ def handle_event(
+ "apply_plan",
+ _params,
+ %{
+ assigns: %{
+ tenant: %Tenant{} = tenant,
+ external_id: ref,
+ pg_delta: {:ok, %{status: :changes, sql: sql}}
+ }
+ } = socket
+ ) do
+ case apply_pg_delta(tenant, sql) do
+ :ok ->
+ {:noreply, push_patch(socket, to: "/admin/dashboard/tenant_migrations?external_id=#{URI.encode(ref)}")}
+
+ {:error, msg} ->
+ {:noreply, assign(socket, error: msg)}
+ end
+ end
+
+ @impl true
+ def render(assigns) do
+ ~H"""
+
+
Tenant Migrations
+
+ Inspect a tenant's applied migrations and drift against the baseline schema snapshot.
+
+
+
+
+ <%= if @error do %>
+
<%= @error %>
+ <% end %>
+
+ <%= if @tenant do %>
+
realtime.schema_migrations
+ <%= schema_migrations(@schema_migrations) %>
+
+
pg-delta plan vs baseline
+ <%= pg_delta_plan(@pg_delta) %>
+ <% end %>
+
+ """
+ end
+
+ defp schema_migrations(nil) do
+ assigns = %{}
+ ~H""
+ end
+
+ defp schema_migrations({:error, msg}) do
+ assigns = %{msg: msg}
+
+ ~H"""
+ <%= @msg %>
+ """
+ end
+
+ defp schema_migrations({:ok, rows}) do
+ assigns = %{rows: rows}
+
+ ~H"""
+ <%= length(@rows) %> row(s)
+
+
+
+
+
+ version
+
+
+ inserted_at
+
+
+
+
+ <%= for {[version, inserted_at], idx} <- Enum.with_index(@rows) do %>
+
+
+ <%= version %>
+
+
+ <%= inserted_at %>
+
+
+ <% end %>
+
+
+
+ """
+ end
+
+ defp pg_delta_plan(nil) do
+ assigns = %{}
+ ~H""
+ end
+
+ defp pg_delta_plan({:error, msg}) do
+ assigns = %{msg: msg}
+
+ ~H"""
+
+ """
+ end
+
+ defp pg_delta_plan({:ok, %{status: :no_changes}}) do
+ assigns = %{}
+
+ ~H"""
+
+ No drift detected. Tenant schema matches the baseline.
+
+ """
+ end
+
+ defp pg_delta_plan({:ok, %{status: :changes, sql: sql}}) do
+ assigns = %{sql: sql}
+
+ ~H"""
+
+ Drift detected between tenant and baseline.
+ The SQL below is reconciliation plan generated by pg-delta and it may contain errors and/or destructive statements.
+ Review every statement before running it.
+
+
+
{
+ const prev = btn.innerText;
+ btn.innerText = 'Copied';
+ btn.disabled = true;
+ setTimeout(() => { btn.innerText = prev; btn.disabled = false; }, 1200);
+ });
+ "}
+ style="position: absolute; top: 8px; right: 8px; z-index: 2;"
+ >Copy
+
<%= @sql %>
+
+
+
+ Apply
+
+
+ """
+ end
+
+ defp assign_error(socket, ref, msg) do
+ assign(socket,
+ external_id: ref,
+ tenant: nil,
+ schema_migrations: nil,
+ pg_delta: nil,
+ error: msg
+ )
+ end
+
+ defp fetch_schema_migrations(db_conn) do
+ case Postgrex.query(db_conn, @schema_migrations_query, [], timeout: @query_timeout) do
+ {:ok, %{rows: rows}} ->
+ {:ok, Enum.map(rows, fn [v, ts] -> [to_string(v), format_ts(ts)] end)}
+
+ {:error, %{postgres: %{message: message}}} ->
+ log_warning("TenantMigrationsSchemaMigrationsQueryError", message)
+ {:error, message}
+
+ {:error, reason} ->
+ log_warning("TenantMigrationsSchemaMigrationsQueryFailed", reason)
+ {:error, inspect(reason)}
+ end
+ end
+
+ defp format_ts(%NaiveDateTime{} = t), do: NaiveDateTime.to_string(t)
+ defp format_ts(%DateTime{} = t), do: DateTime.to_string(t)
+ defp format_ts(other), do: to_string(other)
+
+ defp postgres_url(%Database{} = db) do
+ sslmode = if db.ssl, do: "require", else: "disable"
+
+ IO.iodata_to_binary([
+ "postgresql://",
+ URI.encode_www_form(db.username),
+ ":",
+ URI.encode_www_form(db.password),
+ "@",
+ db.hostname,
+ ":",
+ Integer.to_string(db.port),
+ "/",
+ db.database,
+ "?sslmode=",
+ sslmode
+ ])
+ end
+
+ defp run_pg_delta(%Database{} = settings) do
+ case System.find_executable("pgdelta") do
+ nil ->
+ log_warning("TenantMigrationsPgDeltaMissing", "pgdelta not found on PATH")
+ {:error, "pgdelta not found on PATH"}
+
+ path ->
+ baseline = Application.app_dir(:realtime, "priv/repo/tenant_db_baseline.json")
+
+ args = [
+ "plan",
+ "--source",
+ postgres_url(settings),
+ "--target",
+ baseline,
+ "--filter",
+ @pg_delta_filter,
+ "--format",
+ "sql"
+ ]
+
+ case System.cmd(path, args, stderr_to_stdout: true) do
+ {output, 0} ->
+ {:ok, %{status: :no_changes, sql: output}}
+
+ {output, 2} ->
+ {:ok, %{status: :changes, sql: output}}
+
+ {output, code} ->
+ log_warning("TenantMigrationsPgDeltaNonZeroExit", "exit #{code}: #{output}")
+ {:error, "pg-delta exited #{code}:\n#{output}"}
+ end
+ end
+ end
+
+ defp apply_pg_delta(%Tenant{} = tenant, sql) do
+ opts = [query_type: :text, timeout: @query_timeout]
+
+ with {:ok, settings} <- Database.from_tenant(tenant, @application_name, :stop),
+ {:ok, db_conn} <- Database.connect_db(settings),
+ {:ok, _} <- Postgrex.query(db_conn, sql, [], opts) do
+ :ok
+ else
+ {:error, %{postgres: %{message: message}}} ->
+ log_warning("TenantMigrationsApplyFailed", message)
+ {:error, "Apply failed: #{message}"}
+
+ {:error, reason} ->
+ log_warning("TenantMigrationsApplyFailed", reason)
+ {:error, "Apply failed: #{inspect(reason)}"}
+ end
+ end
+end
diff --git a/lib/realtime_web/router.ex b/lib/realtime_web/router.ex
index a334142d1..8520426d5 100644
--- a/lib/realtime_web/router.ex
+++ b/lib/realtime_web/router.ex
@@ -132,7 +132,8 @@ defmodule RealtimeWeb.Router do
recon_trace: RealtimeWeb.Dashboard.ReconTrace,
node_info: RealtimeWeb.Dashboard.NodeInfo,
sql_inspector: RealtimeWeb.Dashboard.SqlInspector,
- feature_flags: RealtimeWeb.Dashboard.FeatureFlags
+ feature_flags: RealtimeWeb.Dashboard.FeatureFlags,
+ tenant_migrations: RealtimeWeb.Dashboard.TenantMigrations
]
)
end
diff --git a/mise.lock b/mise.lock
index 0a2d39c48..d77e9f833 100644
--- a/mise.lock
+++ b/mise.lock
@@ -39,3 +39,7 @@ url = "https://nodejs.org/dist/v24.14.1/node-v24.14.1-darwin-x64.tar.gz"
[tools.node."platforms.windows-x64"]
checksum = "sha256:6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"
url = "https://nodejs.org/dist/v24.14.1/node-v24.14.1-win-x64.zip"
+
+[[tools."npm:@supabase/pg-delta"]]
+version = "1.0.0-alpha.24"
+backend = "npm:@supabase/pg-delta"
diff --git a/mise.toml b/mise.toml
index 3a92bd5e1..674d8ea53 100644
--- a/mise.toml
+++ b/mise.toml
@@ -2,6 +2,7 @@
elixir = "1.18.4-otp-27"
erlang = "27"
node = "24"
+"npm:@supabase/pg-delta" = "1.0.0-alpha.24"
[env]
API_JWT_SECRET = "dev"
diff --git a/priv/repo/tenant_db_baseline.json b/priv/repo/tenant_db_baseline.json
new file mode 100644
index 000000000..e4ddd256a
--- /dev/null
+++ b/priv/repo/tenant_db_baseline.json
@@ -0,0 +1,15249 @@
+{
+ "version": 170006,
+ "currentUser": "supabase_admin",
+ "aggregates": {},
+ "collations": {},
+ "compositeTypes": {
+ "type:realtime.user_defined_filter": {
+ "schema": "realtime",
+ "name": "user_defined_filter",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": false,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "n",
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "columns": [
+ {
+ "name": "column_name",
+ "position": 1,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "op",
+ "position": 2,
+ "data_type": "realtime.equality_op",
+ "data_type_str": "realtime.equality_op",
+ "is_custom_type": true,
+ "custom_type_type": "e",
+ "custom_type_category": "E",
+ "custom_type_schema": "realtime",
+ "custom_type_name": "equality_op",
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "value",
+ "position": 3,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "type:realtime.wal_column": {
+ "schema": "realtime",
+ "name": "wal_column",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": false,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "n",
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "columns": [
+ {
+ "name": "name",
+ "position": 1,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "type_name",
+ "position": 2,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "type_oid",
+ "position": 3,
+ "data_type": "oid",
+ "data_type_str": "oid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "value",
+ "position": 4,
+ "data_type": "jsonb",
+ "data_type_str": "jsonb",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "is_pkey",
+ "position": 5,
+ "data_type": "boolean",
+ "data_type_str": "boolean",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "is_selectable",
+ "position": 6,
+ "data_type": "boolean",
+ "data_type_str": "boolean",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "type:realtime.wal_rls": {
+ "schema": "realtime",
+ "name": "wal_rls",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": false,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "n",
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "columns": [
+ {
+ "name": "wal",
+ "position": 1,
+ "data_type": "jsonb",
+ "data_type_str": "jsonb",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "is_rls_enabled",
+ "position": 2,
+ "data_type": "boolean",
+ "data_type_str": "boolean",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "subscription_ids",
+ "position": 3,
+ "data_type": "uuid[]",
+ "data_type_str": "uuid[]",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ },
+ {
+ "name": "errors",
+ "position": 4,
+ "data_type": "text[]",
+ "data_type_str": "text[]",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ }
+ },
+ "domains": {},
+ "enums": {
+ "type:realtime.action": {
+ "schema": "realtime",
+ "name": "action",
+ "owner": "supabase_admin",
+ "labels": [
+ {
+ "sort_order": 1,
+ "label": "INSERT"
+ },
+ {
+ "sort_order": 2,
+ "label": "UPDATE"
+ },
+ {
+ "sort_order": 3,
+ "label": "DELETE"
+ },
+ {
+ "sort_order": 4,
+ "label": "TRUNCATE"
+ },
+ {
+ "sort_order": 5,
+ "label": "ERROR"
+ }
+ ],
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "type:realtime.equality_op": {
+ "schema": "realtime",
+ "name": "equality_op",
+ "owner": "supabase_admin",
+ "labels": [
+ {
+ "sort_order": 1,
+ "label": "eq"
+ },
+ {
+ "sort_order": 2,
+ "label": "neq"
+ },
+ {
+ "sort_order": 3,
+ "label": "lt"
+ },
+ {
+ "sort_order": 4,
+ "label": "lte"
+ },
+ {
+ "sort_order": 5,
+ "label": "gt"
+ },
+ {
+ "sort_order": 6,
+ "label": "gte"
+ },
+ {
+ "sort_order": 7,
+ "label": "in"
+ }
+ ],
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ }
+ },
+ "extensions": {
+ "extension:\"uuid-ossp\"": {
+ "name": "\"uuid-ossp\"",
+ "schema": "extensions",
+ "relocatable": true,
+ "version": "1.1",
+ "owner": "supabase_admin",
+ "comment": "generate universally unique identifiers (UUIDs)",
+ "members": [
+ "procedure:extensions.uuid_generate_v1()",
+ "procedure:extensions.uuid_generate_v1mc()",
+ "procedure:extensions.uuid_generate_v3(uuid,text)",
+ "procedure:extensions.uuid_generate_v4()",
+ "procedure:extensions.uuid_generate_v5(uuid,text)",
+ "procedure:extensions.uuid_nil()",
+ "procedure:extensions.uuid_ns_dns()",
+ "procedure:extensions.uuid_ns_oid()",
+ "procedure:extensions.uuid_ns_url()",
+ "procedure:extensions.uuid_ns_x500()"
+ ]
+ },
+ "extension:pg_graphql": {
+ "name": "pg_graphql",
+ "schema": "graphql",
+ "relocatable": false,
+ "version": "1.5.11",
+ "owner": "supabase_admin",
+ "comment": "pg_graphql: GraphQL support",
+ "members": [
+ "eventTrigger:graphql_watch_ddl",
+ "eventTrigger:graphql_watch_drop",
+ "procedure:graphql._internal_resolve(text,jsonb,text,jsonb)",
+ "procedure:graphql.comment_directive(text)",
+ "procedure:graphql.exception(text)",
+ "procedure:graphql.get_schema_version()",
+ "procedure:graphql.increment_schema_version()",
+ "procedure:graphql.resolve(text,jsonb,text,jsonb)",
+ "procedure:graphql_public.graphql(text,text,jsonb,jsonb)",
+ "sequence:graphql.seq_schema_version"
+ ]
+ },
+ "extension:pg_stat_statements": {
+ "name": "pg_stat_statements",
+ "schema": "extensions",
+ "relocatable": true,
+ "version": "1.11",
+ "owner": "supabase_admin",
+ "comment": "track planning and execution statistics of all SQL statements executed",
+ "members": [
+ "procedure:extensions.pg_stat_statements(boolean)",
+ "procedure:extensions.pg_stat_statements_info()",
+ "procedure:extensions.pg_stat_statements_reset(oid,oid,bigint,boolean)",
+ "type:extensions._pg_stat_statements",
+ "type:extensions._pg_stat_statements_info",
+ "view:extensions.pg_stat_statements",
+ "view:extensions.pg_stat_statements",
+ "view:extensions.pg_stat_statements_info",
+ "view:extensions.pg_stat_statements_info"
+ ]
+ },
+ "extension:pgcrypto": {
+ "name": "pgcrypto",
+ "schema": "extensions",
+ "relocatable": true,
+ "version": "1.3",
+ "owner": "supabase_admin",
+ "comment": "cryptographic functions",
+ "members": [
+ "procedure:extensions.armor(bytea)",
+ "procedure:extensions.armor(bytea,text[],text[])",
+ "procedure:extensions.crypt(text,text)",
+ "procedure:extensions.dearmor(text)",
+ "procedure:extensions.decrypt(bytea,bytea,text)",
+ "procedure:extensions.decrypt_iv(bytea,bytea,bytea,text)",
+ "procedure:extensions.digest(bytea,text)",
+ "procedure:extensions.digest(text,text)",
+ "procedure:extensions.encrypt(bytea,bytea,text)",
+ "procedure:extensions.encrypt_iv(bytea,bytea,bytea,text)",
+ "procedure:extensions.gen_random_bytes(integer)",
+ "procedure:extensions.gen_random_uuid()",
+ "procedure:extensions.gen_salt(text)",
+ "procedure:extensions.gen_salt(text,integer)",
+ "procedure:extensions.hmac(bytea,bytea,text)",
+ "procedure:extensions.hmac(text,text,text)",
+ "procedure:extensions.pgp_armor_headers(text)",
+ "procedure:extensions.pgp_key_id(bytea)",
+ "procedure:extensions.pgp_pub_decrypt(bytea,bytea)",
+ "procedure:extensions.pgp_pub_decrypt(bytea,bytea,text)",
+ "procedure:extensions.pgp_pub_decrypt(bytea,bytea,text,text)",
+ "procedure:extensions.pgp_pub_decrypt_bytea(bytea,bytea)",
+ "procedure:extensions.pgp_pub_decrypt_bytea(bytea,bytea,text)",
+ "procedure:extensions.pgp_pub_decrypt_bytea(bytea,bytea,text,text)",
+ "procedure:extensions.pgp_pub_encrypt(text,bytea)",
+ "procedure:extensions.pgp_pub_encrypt(text,bytea,text)",
+ "procedure:extensions.pgp_pub_encrypt_bytea(bytea,bytea)",
+ "procedure:extensions.pgp_pub_encrypt_bytea(bytea,bytea,text)",
+ "procedure:extensions.pgp_sym_decrypt(bytea,text)",
+ "procedure:extensions.pgp_sym_decrypt(bytea,text,text)",
+ "procedure:extensions.pgp_sym_decrypt_bytea(bytea,text)",
+ "procedure:extensions.pgp_sym_decrypt_bytea(bytea,text,text)",
+ "procedure:extensions.pgp_sym_encrypt(text,text)",
+ "procedure:extensions.pgp_sym_encrypt(text,text,text)",
+ "procedure:extensions.pgp_sym_encrypt_bytea(bytea,text)",
+ "procedure:extensions.pgp_sym_encrypt_bytea(bytea,text,text)"
+ ]
+ },
+ "extension:plpgsql": {
+ "name": "plpgsql",
+ "schema": "pg_catalog",
+ "relocatable": false,
+ "version": "1.0",
+ "owner": "supabase_admin",
+ "comment": "PL/pgSQL procedural language",
+ "members": [
+ "procedure:pg_catalog.plpgsql_call_handler()",
+ "procedure:pg_catalog.plpgsql_inline_handler(internal)",
+ "procedure:pg_catalog.plpgsql_validator(oid)"
+ ]
+ },
+ "extension:supabase_vault": {
+ "name": "supabase_vault",
+ "schema": "vault",
+ "relocatable": false,
+ "version": "0.3.1",
+ "owner": "supabase_admin",
+ "comment": "Supabase Vault Extension",
+ "members": [
+ "procedure:vault._crypto_aead_det_decrypt(bytea,bytea,bigint,bytea,bytea)",
+ "procedure:vault._crypto_aead_det_encrypt(bytea,bytea,bigint,bytea,bytea)",
+ "procedure:vault._crypto_aead_det_noncegen()",
+ "procedure:vault.create_secret(text,text,text,uuid)",
+ "procedure:vault.update_secret(uuid,text,text,text,uuid)",
+ "table:vault.secrets",
+ "table:vault.secrets",
+ "type:vault._decrypted_secrets",
+ "type:vault._secrets",
+ "view:vault.decrypted_secrets",
+ "view:vault.decrypted_secrets"
+ ]
+ }
+ },
+ "procedures": {
+ "procedure:auth.email()": {
+ "schema": "auth",
+ "name": "email",
+ "kind": "f",
+ "return_type": "text",
+ "return_type_schema": "pg_catalog",
+ "language": "sql",
+ "security_definer": false,
+ "volatility": "s",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\n select nullif(current_setting('request.jwt.claim.email', true), '')::text;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION auth.email()\n RETURNS text\n LANGUAGE sql\n STABLE\nAS $function$\n select nullif(current_setting('request.jwt.claim.email', true), '')::text;\n$function$\n",
+ "config": null,
+ "owner": "supabase_auth_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:auth.role()": {
+ "schema": "auth",
+ "name": "role",
+ "kind": "f",
+ "return_type": "text",
+ "return_type_schema": "pg_catalog",
+ "language": "sql",
+ "security_definer": false,
+ "volatility": "s",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\n select nullif(current_setting('request.jwt.claim.role', true), '')::text;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION auth.role()\n RETURNS text\n LANGUAGE sql\n STABLE\nAS $function$\n select nullif(current_setting('request.jwt.claim.role', true), '')::text;\n$function$\n",
+ "config": null,
+ "owner": "supabase_auth_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:auth.uid()": {
+ "schema": "auth",
+ "name": "uid",
+ "kind": "f",
+ "return_type": "uuid",
+ "return_type_schema": "pg_catalog",
+ "language": "sql",
+ "security_definer": false,
+ "volatility": "s",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\n select nullif(current_setting('request.jwt.claim.sub', true), '')::uuid;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION auth.uid()\n RETURNS uuid\n LANGUAGE sql\n STABLE\nAS $function$\n select nullif(current_setting('request.jwt.claim.sub', true), '')::uuid;\n$function$\n",
+ "config": null,
+ "owner": "supabase_auth_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:extensions.grant_pg_cron_access()": {
+ "schema": "extensions",
+ "name": "grant_pg_cron_access",
+ "kind": "f",
+ "return_type": "event_trigger",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\nBEGIN\n IF EXISTS (\n SELECT\n FROM pg_event_trigger_ddl_commands() AS ev\n JOIN pg_extension AS ext\n ON ev.objid = ext.oid\n WHERE ext.extname = 'pg_cron'\n )\n THEN\n grant usage on schema cron to postgres with grant option;\n\n alter default privileges in schema cron grant all on tables to postgres with grant option;\n alter default privileges in schema cron grant all on functions to postgres with grant option;\n alter default privileges in schema cron grant all on sequences to postgres with grant option;\n\n alter default privileges for user supabase_admin in schema cron grant all\n on sequences to postgres with grant option;\n alter default privileges for user supabase_admin in schema cron grant all\n on tables to postgres with grant option;\n alter default privileges for user supabase_admin in schema cron grant all\n on functions to postgres with grant option;\n\n grant all privileges on all tables in schema cron to postgres with grant option;\n revoke all on table cron.job from postgres;\n grant select on table cron.job to postgres with grant option;\n END IF;\nEND;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION extensions.grant_pg_cron_access()\n RETURNS event_trigger\n LANGUAGE plpgsql\nAS $function$\nBEGIN\n IF EXISTS (\n SELECT\n FROM pg_event_trigger_ddl_commands() AS ev\n JOIN pg_extension AS ext\n ON ev.objid = ext.oid\n WHERE ext.extname = 'pg_cron'\n )\n THEN\n grant usage on schema cron to postgres with grant option;\n\n alter default privileges in schema cron grant all on tables to postgres with grant option;\n alter default privileges in schema cron grant all on functions to postgres with grant option;\n alter default privileges in schema cron grant all on sequences to postgres with grant option;\n\n alter default privileges for user supabase_admin in schema cron grant all\n on sequences to postgres with grant option;\n alter default privileges for user supabase_admin in schema cron grant all\n on tables to postgres with grant option;\n alter default privileges for user supabase_admin in schema cron grant all\n on functions to postgres with grant option;\n\n grant all privileges on all tables in schema cron to postgres with grant option;\n revoke all on table cron.job from postgres;\n grant select on table cron.job to postgres with grant option;\n END IF;\nEND;\n$function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": "Grants access to pg_cron",
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": true
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:extensions.grant_pg_graphql_access()": {
+ "schema": "extensions",
+ "name": "grant_pg_graphql_access",
+ "kind": "f",
+ "return_type": "event_trigger",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\nDECLARE\n func_is_graphql_resolve bool;\nBEGIN\n func_is_graphql_resolve = (\n SELECT n.proname = 'resolve'\n FROM pg_event_trigger_ddl_commands() AS ev\n LEFT JOIN pg_catalog.pg_proc AS n\n ON ev.objid = n.oid\n );\n\n IF func_is_graphql_resolve\n THEN\n -- Update public wrapper to pass all arguments through to the pg_graphql resolve func\n DROP FUNCTION IF EXISTS graphql_public.graphql;\n create or replace function graphql_public.graphql(\n \"operationName\" text default null,\n query text default null,\n variables jsonb default null,\n extensions jsonb default null\n )\n returns jsonb\n language sql\n as $$\n select graphql.resolve(\n query := query,\n variables := coalesce(variables, '{}'),\n \"operationName\" := \"operationName\",\n extensions := extensions\n );\n $$;\n\n -- This hook executes when `graphql.resolve` is created. That is not necessarily the last\n -- function in the extension so we need to grant permissions on existing entities AND\n -- update default permissions to any others that are created after `graphql.resolve`\n grant usage on schema graphql to postgres, anon, authenticated, service_role;\n grant select on all tables in schema graphql to postgres, anon, authenticated, service_role;\n grant execute on all functions in schema graphql to postgres, anon, authenticated, service_role;\n grant all on all sequences in schema graphql to postgres, anon, authenticated, service_role;\n alter default privileges in schema graphql grant all on tables to postgres, anon, authenticated, service_role;\n alter default privileges in schema graphql grant all on functions to postgres, anon, authenticated, service_role;\n alter default privileges in schema graphql grant all on sequences to postgres, anon, authenticated, service_role;\n\n -- Allow postgres role to allow granting usage on graphql and graphql_public schemas to custom roles\n grant usage on schema graphql_public to postgres with grant option;\n grant usage on schema graphql to postgres with grant option;\n END IF;\n\nEND;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION extensions.grant_pg_graphql_access()\n RETURNS event_trigger\n LANGUAGE plpgsql\nAS $function$\nDECLARE\n func_is_graphql_resolve bool;\nBEGIN\n func_is_graphql_resolve = (\n SELECT n.proname = 'resolve'\n FROM pg_event_trigger_ddl_commands() AS ev\n LEFT JOIN pg_catalog.pg_proc AS n\n ON ev.objid = n.oid\n );\n\n IF func_is_graphql_resolve\n THEN\n -- Update public wrapper to pass all arguments through to the pg_graphql resolve func\n DROP FUNCTION IF EXISTS graphql_public.graphql;\n create or replace function graphql_public.graphql(\n \"operationName\" text default null,\n query text default null,\n variables jsonb default null,\n extensions jsonb default null\n )\n returns jsonb\n language sql\n as $$\n select graphql.resolve(\n query := query,\n variables := coalesce(variables, '{}'),\n \"operationName\" := \"operationName\",\n extensions := extensions\n );\n $$;\n\n -- This hook executes when `graphql.resolve` is created. That is not necessarily the last\n -- function in the extension so we need to grant permissions on existing entities AND\n -- update default permissions to any others that are created after `graphql.resolve`\n grant usage on schema graphql to postgres, anon, authenticated, service_role;\n grant select on all tables in schema graphql to postgres, anon, authenticated, service_role;\n grant execute on all functions in schema graphql to postgres, anon, authenticated, service_role;\n grant all on all sequences in schema graphql to postgres, anon, authenticated, service_role;\n alter default privileges in schema graphql grant all on tables to postgres, anon, authenticated, service_role;\n alter default privileges in schema graphql grant all on functions to postgres, anon, authenticated, service_role;\n alter default privileges in schema graphql grant all on sequences to postgres, anon, authenticated, service_role;\n\n -- Allow postgres role to allow granting usage on graphql and graphql_public schemas to custom roles\n grant usage on schema graphql_public to postgres with grant option;\n grant usage on schema graphql to postgres with grant option;\n END IF;\n\nEND;\n$function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": "Grants access to pg_graphql",
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": true
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:extensions.grant_pg_net_access()": {
+ "schema": "extensions",
+ "name": "grant_pg_net_access",
+ "kind": "f",
+ "return_type": "event_trigger",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\nBEGIN\n IF EXISTS (\n SELECT 1\n FROM pg_event_trigger_ddl_commands() AS ev\n JOIN pg_extension AS ext\n ON ev.objid = ext.oid\n WHERE ext.extname = 'pg_net'\n )\n THEN\n IF NOT EXISTS (\n SELECT 1\n FROM pg_roles\n WHERE rolname = 'supabase_functions_admin'\n )\n THEN\n CREATE USER supabase_functions_admin NOINHERIT CREATEROLE LOGIN NOREPLICATION;\n END IF;\n\n GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role;\n\n IF EXISTS (\n SELECT FROM pg_extension\n WHERE extname = 'pg_net'\n -- all versions in use on existing projects as of 2025-02-20\n -- version 0.12.0 onwards don't need these applied\n AND extversion IN ('0.2', '0.6', '0.7', '0.7.1', '0.8', '0.10.0', '0.11.0')\n ) THEN\n ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;\n ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;\n\n ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;\n ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;\n\n REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;\n REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;\n\n GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;\n GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;\n END IF;\n END IF;\nEND;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION extensions.grant_pg_net_access()\n RETURNS event_trigger\n LANGUAGE plpgsql\nAS $function$\nBEGIN\n IF EXISTS (\n SELECT 1\n FROM pg_event_trigger_ddl_commands() AS ev\n JOIN pg_extension AS ext\n ON ev.objid = ext.oid\n WHERE ext.extname = 'pg_net'\n )\n THEN\n IF NOT EXISTS (\n SELECT 1\n FROM pg_roles\n WHERE rolname = 'supabase_functions_admin'\n )\n THEN\n CREATE USER supabase_functions_admin NOINHERIT CREATEROLE LOGIN NOREPLICATION;\n END IF;\n\n GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role;\n\n IF EXISTS (\n SELECT FROM pg_extension\n WHERE extname = 'pg_net'\n -- all versions in use on existing projects as of 2025-02-20\n -- version 0.12.0 onwards don't need these applied\n AND extversion IN ('0.2', '0.6', '0.7', '0.7.1', '0.8', '0.10.0', '0.11.0')\n ) THEN\n ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;\n ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;\n\n ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;\n ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;\n\n REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;\n REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;\n\n GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;\n GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;\n END IF;\n END IF;\nEND;\n$function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": "Grants access to pg_net",
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": true
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:extensions.pgrst_ddl_watch()": {
+ "schema": "extensions",
+ "name": "pgrst_ddl_watch",
+ "kind": "f",
+ "return_type": "event_trigger",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\nDECLARE\n cmd record;\nBEGIN\n FOR cmd IN SELECT * FROM pg_event_trigger_ddl_commands()\n LOOP\n IF cmd.command_tag IN (\n 'CREATE SCHEMA', 'ALTER SCHEMA'\n , 'CREATE TABLE', 'CREATE TABLE AS', 'SELECT INTO', 'ALTER TABLE'\n , 'CREATE FOREIGN TABLE', 'ALTER FOREIGN TABLE'\n , 'CREATE VIEW', 'ALTER VIEW'\n , 'CREATE MATERIALIZED VIEW', 'ALTER MATERIALIZED VIEW'\n , 'CREATE FUNCTION', 'ALTER FUNCTION'\n , 'CREATE TRIGGER'\n , 'CREATE TYPE', 'ALTER TYPE'\n , 'CREATE RULE'\n , 'COMMENT'\n )\n -- don't notify in case of CREATE TEMP table or other objects created on pg_temp\n AND cmd.schema_name is distinct from 'pg_temp'\n THEN\n NOTIFY pgrst, 'reload schema';\n END IF;\n END LOOP;\nEND; ",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION extensions.pgrst_ddl_watch()\n RETURNS event_trigger\n LANGUAGE plpgsql\nAS $function$\nDECLARE\n cmd record;\nBEGIN\n FOR cmd IN SELECT * FROM pg_event_trigger_ddl_commands()\n LOOP\n IF cmd.command_tag IN (\n 'CREATE SCHEMA', 'ALTER SCHEMA'\n , 'CREATE TABLE', 'CREATE TABLE AS', 'SELECT INTO', 'ALTER TABLE'\n , 'CREATE FOREIGN TABLE', 'ALTER FOREIGN TABLE'\n , 'CREATE VIEW', 'ALTER VIEW'\n , 'CREATE MATERIALIZED VIEW', 'ALTER MATERIALIZED VIEW'\n , 'CREATE FUNCTION', 'ALTER FUNCTION'\n , 'CREATE TRIGGER'\n , 'CREATE TYPE', 'ALTER TYPE'\n , 'CREATE RULE'\n , 'COMMENT'\n )\n -- don't notify in case of CREATE TEMP table or other objects created on pg_temp\n AND cmd.schema_name is distinct from 'pg_temp'\n THEN\n NOTIFY pgrst, 'reload schema';\n END IF;\n END LOOP;\nEND; $function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": true
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:extensions.pgrst_drop_watch()": {
+ "schema": "extensions",
+ "name": "pgrst_drop_watch",
+ "kind": "f",
+ "return_type": "event_trigger",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\nDECLARE\n obj record;\nBEGIN\n FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects()\n LOOP\n IF obj.object_type IN (\n 'schema'\n , 'table'\n , 'foreign table'\n , 'view'\n , 'materialized view'\n , 'function'\n , 'trigger'\n , 'type'\n , 'rule'\n )\n AND obj.is_temporary IS false -- no pg_temp objects\n THEN\n NOTIFY pgrst, 'reload schema';\n END IF;\n END LOOP;\nEND; ",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION extensions.pgrst_drop_watch()\n RETURNS event_trigger\n LANGUAGE plpgsql\nAS $function$\nDECLARE\n obj record;\nBEGIN\n FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects()\n LOOP\n IF obj.object_type IN (\n 'schema'\n , 'table'\n , 'foreign table'\n , 'view'\n , 'materialized view'\n , 'function'\n , 'trigger'\n , 'type'\n , 'rule'\n )\n AND obj.is_temporary IS false -- no pg_temp objects\n THEN\n NOTIFY pgrst, 'reload schema';\n END IF;\n END LOOP;\nEND; $function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": true
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:extensions.set_graphql_placeholder()": {
+ "schema": "extensions",
+ "name": "set_graphql_placeholder",
+ "kind": "f",
+ "return_type": "event_trigger",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\n DECLARE\n graphql_is_dropped bool;\n BEGIN\n graphql_is_dropped = (\n SELECT ev.schema_name = 'graphql_public'\n FROM pg_event_trigger_dropped_objects() AS ev\n WHERE ev.schema_name = 'graphql_public'\n );\n\n IF graphql_is_dropped\n THEN\n create or replace function graphql_public.graphql(\n \"operationName\" text default null,\n query text default null,\n variables jsonb default null,\n extensions jsonb default null\n )\n returns jsonb\n language plpgsql\n as $$\n DECLARE\n server_version float;\n BEGIN\n server_version = (SELECT (SPLIT_PART((select version()), ' ', 2))::float);\n\n IF server_version >= 14 THEN\n RETURN jsonb_build_object(\n 'errors', jsonb_build_array(\n jsonb_build_object(\n 'message', 'pg_graphql extension is not enabled.'\n )\n )\n );\n ELSE\n RETURN jsonb_build_object(\n 'errors', jsonb_build_array(\n jsonb_build_object(\n 'message', 'pg_graphql is only available on projects running Postgres 14 onwards.'\n )\n )\n );\n END IF;\n END;\n $$;\n END IF;\n\n END;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION extensions.set_graphql_placeholder()\n RETURNS event_trigger\n LANGUAGE plpgsql\nAS $function$\n DECLARE\n graphql_is_dropped bool;\n BEGIN\n graphql_is_dropped = (\n SELECT ev.schema_name = 'graphql_public'\n FROM pg_event_trigger_dropped_objects() AS ev\n WHERE ev.schema_name = 'graphql_public'\n );\n\n IF graphql_is_dropped\n THEN\n create or replace function graphql_public.graphql(\n \"operationName\" text default null,\n query text default null,\n variables jsonb default null,\n extensions jsonb default null\n )\n returns jsonb\n language plpgsql\n as $$\n DECLARE\n server_version float;\n BEGIN\n server_version = (SELECT (SPLIT_PART((select version()), ' ', 2))::float);\n\n IF server_version >= 14 THEN\n RETURN jsonb_build_object(\n 'errors', jsonb_build_array(\n jsonb_build_object(\n 'message', 'pg_graphql extension is not enabled.'\n )\n )\n );\n ELSE\n RETURN jsonb_build_object(\n 'errors', jsonb_build_array(\n jsonb_build_object(\n 'message', 'pg_graphql is only available on projects running Postgres 14 onwards.'\n )\n )\n );\n END IF;\n END;\n $$;\n END IF;\n\n END;\n$function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": "Reintroduces placeholder function for graphql_public.graphql",
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": true
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:pgbouncer.get_auth(text)": {
+ "schema": "pgbouncer",
+ "name": "get_auth",
+ "kind": "f",
+ "return_type": "record",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": true,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 1000,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": true,
+ "argument_count": 1,
+ "argument_default_count": 0,
+ "argument_names": [
+ "p_usename",
+ "username",
+ "password"
+ ],
+ "argument_types": [
+ "text"
+ ],
+ "all_argument_types": [
+ "text",
+ "text",
+ "text"
+ ],
+ "argument_modes": [
+ "i",
+ "t",
+ "t"
+ ],
+ "argument_defaults": null,
+ "source_code": "\nbegin\n raise debug 'PgBouncer auth request: %', p_usename;\n\n return query\n select \n rolname::text, \n case when rolvaliduntil < now() \n then null \n else rolpassword::text \n end \n from pg_authid \n where rolname=$1 and rolcanlogin;\nend;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION pgbouncer.get_auth(p_usename text)\n RETURNS TABLE(username text, password text)\n LANGUAGE plpgsql\n SECURITY DEFINER\n SET search_path TO ''\nAS $function$\nbegin\n raise debug 'PgBouncer auth request: %', p_usename;\n\n return query\n select \n rolname::text, \n case when rolvaliduntil < now() \n then null \n else rolpassword::text \n end \n from pg_authid \n where rolname=$1 and rolcanlogin;\nend;\n$function$\n",
+ "config": [
+ "search_path=\"\""
+ ],
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "pgbouncer",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.\"cast\"(text,regtype)": {
+ "schema": "realtime",
+ "name": "\"cast\"",
+ "kind": "f",
+ "return_type": "jsonb",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "i",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 2,
+ "argument_default_count": 0,
+ "argument_names": [
+ "val",
+ "type_"
+ ],
+ "argument_types": [
+ "text",
+ "regtype"
+ ],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\ndeclare\n res jsonb;\nbegin\n if type_::text = 'bytea' then\n return to_jsonb(val);\n end if;\n execute format('select to_jsonb(%L::'|| type_::text || ')', val) into res;\n return res;\nend\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.\"cast\"(val text, type_ regtype)\n RETURNS jsonb\n LANGUAGE plpgsql\n IMMUTABLE\nAS $function$\ndeclare\n res jsonb;\nbegin\n if type_::text = 'bytea' then\n return to_jsonb(val);\n end if;\n execute format('select to_jsonb(%L::'|| type_::text || ')', val) into res;\n return res;\nend\n$function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.apply_rls(jsonb,integer)": {
+ "schema": "realtime",
+ "name": "apply_rls",
+ "kind": "f",
+ "return_type": "realtime.wal_rls",
+ "return_type_schema": "realtime",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 1000,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": true,
+ "argument_count": 2,
+ "argument_default_count": 1,
+ "argument_names": [
+ "wal",
+ "max_record_bytes"
+ ],
+ "argument_types": [
+ "jsonb",
+ "integer"
+ ],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": "(1024 * 1024)",
+ "source_code": "\ndeclare\n-- Regclass of the table e.g. public.notes\nentity_ regclass = (quote_ident(wal ->> 'schema') || '.' || quote_ident(wal ->> 'table'))::regclass;\n\n-- I, U, D, T: insert, update ...\naction realtime.action = (\n case wal ->> 'action'\n when 'I' then 'INSERT'\n when 'U' then 'UPDATE'\n when 'D' then 'DELETE'\n else 'ERROR'\n end\n);\n\n-- Is row level security enabled for the table\nis_rls_enabled bool = relrowsecurity from pg_class where oid = entity_;\n\nsubscriptions realtime.subscription[] = array_agg(subs)\n from\n realtime.subscription subs\n where\n subs.entity = entity_\n -- Filter by action early - only get subscriptions interested in this action\n -- action_filter column can be: '*' (all), 'INSERT', 'UPDATE', or 'DELETE'\n and (subs.action_filter = '*' or subs.action_filter = action::text);\n\n-- Subscription vars\nroles regrole[] = array_agg(distinct us.claims_role::text)\n from\n unnest(subscriptions) us;\n\nworking_role regrole;\nclaimed_role regrole;\nclaims jsonb;\n\nsubscription_id uuid;\nsubscription_has_access bool;\nvisible_to_subscription_ids uuid[] = '{}';\n\n-- structured info for wal's columns\ncolumns realtime.wal_column[];\n-- previous identity values for update/delete\nold_columns realtime.wal_column[];\n\nerror_record_exceeds_max_size boolean = octet_length(wal::text) > max_record_bytes;\n\n-- Primary jsonb output for record\noutput jsonb;\n\nbegin\nperform set_config('role', null, true);\n\ncolumns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n x->>'typeoid',\n realtime.cast(\n (x->'value') #>> '{}',\n coalesce(\n (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4\n (x->>'type')::regtype\n )\n ),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'columns') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\nold_columns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n x->>'typeoid',\n realtime.cast(\n (x->'value') #>> '{}',\n coalesce(\n (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4\n (x->>'type')::regtype\n )\n ),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'identity') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\nfor working_role in select * from unnest(roles) loop\n\n -- Update `is_selectable` for columns and old_columns\n columns =\n array_agg(\n (\n c.name,\n c.type_name,\n c.type_oid,\n c.value,\n c.is_pkey,\n pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')\n )::realtime.wal_column\n )\n from\n unnest(columns) c;\n\n old_columns =\n array_agg(\n (\n c.name,\n c.type_name,\n c.type_oid,\n c.value,\n c.is_pkey,\n pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')\n )::realtime.wal_column\n )\n from\n unnest(old_columns) c;\n\n if action <> 'DELETE' and count(1) = 0 from unnest(columns) c where c.is_pkey then\n return next (\n jsonb_build_object(\n 'schema', wal ->> 'schema',\n 'table', wal ->> 'table',\n 'type', action\n ),\n is_rls_enabled,\n -- subscriptions is already filtered by entity\n (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),\n array['Error 400: Bad Request, no primary key']\n )::realtime.wal_rls;\n\n -- The claims role does not have SELECT permission to the primary key of entity\n elsif action <> 'DELETE' and sum(c.is_selectable::int) <> count(1) from unnest(columns) c where c.is_pkey then\n return next (\n jsonb_build_object(\n 'schema', wal ->> 'schema',\n 'table', wal ->> 'table',\n 'type', action\n ),\n is_rls_enabled,\n (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),\n array['Error 401: Unauthorized']\n )::realtime.wal_rls;\n\n else\n output = jsonb_build_object(\n 'schema', wal ->> 'schema',\n 'table', wal ->> 'table',\n 'type', action,\n 'commit_timestamp', to_char(\n ((wal ->> 'timestamp')::timestamptz at time zone 'utc'),\n 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"'\n ),\n 'columns', (\n select\n jsonb_agg(\n jsonb_build_object(\n 'name', pa.attname,\n 'type', pt.typname\n )\n order by pa.attnum asc\n )\n from\n pg_attribute pa\n join pg_type pt\n on pa.atttypid = pt.oid\n where\n attrelid = entity_\n and attnum > 0\n and pg_catalog.has_column_privilege(working_role, entity_, pa.attname, 'SELECT')\n )\n )\n -- Add \"record\" key for insert and update\n || case\n when action in ('INSERT', 'UPDATE') then\n jsonb_build_object(\n 'record',\n (\n select\n jsonb_object_agg(\n -- if unchanged toast, get column name and value from old record\n coalesce((c).name, (oc).name),\n case\n when (c).name is null then (oc).value\n else (c).value\n end\n )\n from\n unnest(columns) c\n full outer join unnest(old_columns) oc\n on (c).name = (oc).name\n where\n coalesce((c).is_selectable, (oc).is_selectable)\n and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))\n )\n )\n else '{}'::jsonb\n end\n -- Add \"old_record\" key for update and delete\n || case\n when action = 'UPDATE' then\n jsonb_build_object(\n 'old_record',\n (\n select jsonb_object_agg((c).name, (c).value)\n from unnest(old_columns) c\n where\n (c).is_selectable\n and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))\n )\n )\n when action = 'DELETE' then\n jsonb_build_object(\n 'old_record',\n (\n select jsonb_object_agg((c).name, (c).value)\n from unnest(old_columns) c\n where\n (c).is_selectable\n and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))\n and ( not is_rls_enabled or (c).is_pkey ) -- if RLS enabled, we can't secure deletes so filter to pkey\n )\n )\n else '{}'::jsonb\n end;\n\n -- Create the prepared statement\n if is_rls_enabled and action <> 'DELETE' then\n if (select 1 from pg_prepared_statements where name = 'walrus_rls_stmt' limit 1) > 0 then\n deallocate walrus_rls_stmt;\n end if;\n execute realtime.build_prepared_statement_sql('walrus_rls_stmt', entity_, columns);\n end if;\n\n visible_to_subscription_ids = '{}';\n\n for subscription_id, claims in (\n select\n subs.subscription_id,\n subs.claims\n from\n unnest(subscriptions) subs\n where\n subs.entity = entity_\n and subs.claims_role = working_role\n and (\n realtime.is_visible_through_filters(columns, subs.filters)\n or (\n action = 'DELETE'\n and realtime.is_visible_through_filters(old_columns, subs.filters)\n )\n )\n ) loop\n\n if not is_rls_enabled or action = 'DELETE' then\n visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;\n else\n -- Check if RLS allows the role to see the record\n perform\n -- Trim leading and trailing quotes from working_role because set_config\n -- doesn't recognize the role as valid if they are included\n set_config('role', trim(both '\"' from working_role::text), true),\n set_config('request.jwt.claims', claims::text, true);\n\n execute 'execute walrus_rls_stmt' into subscription_has_access;\n\n if subscription_has_access then\n visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;\n end if;\n end if;\n end loop;\n\n perform set_config('role', null, true);\n\n return next (\n output,\n is_rls_enabled,\n visible_to_subscription_ids,\n case\n when error_record_exceeds_max_size then array['Error 413: Payload Too Large']\n else '{}'\n end\n )::realtime.wal_rls;\n\n end if;\nend loop;\n\nperform set_config('role', null, true);\nend;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer DEFAULT (1024 * 1024))\n RETURNS SETOF realtime.wal_rls\n LANGUAGE plpgsql\nAS $function$\ndeclare\n-- Regclass of the table e.g. public.notes\nentity_ regclass = (quote_ident(wal ->> 'schema') || '.' || quote_ident(wal ->> 'table'))::regclass;\n\n-- I, U, D, T: insert, update ...\naction realtime.action = (\n case wal ->> 'action'\n when 'I' then 'INSERT'\n when 'U' then 'UPDATE'\n when 'D' then 'DELETE'\n else 'ERROR'\n end\n);\n\n-- Is row level security enabled for the table\nis_rls_enabled bool = relrowsecurity from pg_class where oid = entity_;\n\nsubscriptions realtime.subscription[] = array_agg(subs)\n from\n realtime.subscription subs\n where\n subs.entity = entity_\n -- Filter by action early - only get subscriptions interested in this action\n -- action_filter column can be: '*' (all), 'INSERT', 'UPDATE', or 'DELETE'\n and (subs.action_filter = '*' or subs.action_filter = action::text);\n\n-- Subscription vars\nroles regrole[] = array_agg(distinct us.claims_role::text)\n from\n unnest(subscriptions) us;\n\nworking_role regrole;\nclaimed_role regrole;\nclaims jsonb;\n\nsubscription_id uuid;\nsubscription_has_access bool;\nvisible_to_subscription_ids uuid[] = '{}';\n\n-- structured info for wal's columns\ncolumns realtime.wal_column[];\n-- previous identity values for update/delete\nold_columns realtime.wal_column[];\n\nerror_record_exceeds_max_size boolean = octet_length(wal::text) > max_record_bytes;\n\n-- Primary jsonb output for record\noutput jsonb;\n\nbegin\nperform set_config('role', null, true);\n\ncolumns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n x->>'typeoid',\n realtime.cast(\n (x->'value') #>> '{}',\n coalesce(\n (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4\n (x->>'type')::regtype\n )\n ),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'columns') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\nold_columns =\n array_agg(\n (\n x->>'name',\n x->>'type',\n x->>'typeoid',\n realtime.cast(\n (x->'value') #>> '{}',\n coalesce(\n (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4\n (x->>'type')::regtype\n )\n ),\n (pks ->> 'name') is not null,\n true\n )::realtime.wal_column\n )\n from\n jsonb_array_elements(wal -> 'identity') x\n left join jsonb_array_elements(wal -> 'pk') pks\n on (x ->> 'name') = (pks ->> 'name');\n\nfor working_role in select * from unnest(roles) loop\n\n -- Update `is_selectable` for columns and old_columns\n columns =\n array_agg(\n (\n c.name,\n c.type_name,\n c.type_oid,\n c.value,\n c.is_pkey,\n pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')\n )::realtime.wal_column\n )\n from\n unnest(columns) c;\n\n old_columns =\n array_agg(\n (\n c.name,\n c.type_name,\n c.type_oid,\n c.value,\n c.is_pkey,\n pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT')\n )::realtime.wal_column\n )\n from\n unnest(old_columns) c;\n\n if action <> 'DELETE' and count(1) = 0 from unnest(columns) c where c.is_pkey then\n return next (\n jsonb_build_object(\n 'schema', wal ->> 'schema',\n 'table', wal ->> 'table',\n 'type', action\n ),\n is_rls_enabled,\n -- subscriptions is already filtered by entity\n (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),\n array['Error 400: Bad Request, no primary key']\n )::realtime.wal_rls;\n\n -- The claims role does not have SELECT permission to the primary key of entity\n elsif action <> 'DELETE' and sum(c.is_selectable::int) <> count(1) from unnest(columns) c where c.is_pkey then\n return next (\n jsonb_build_object(\n 'schema', wal ->> 'schema',\n 'table', wal ->> 'table',\n 'type', action\n ),\n is_rls_enabled,\n (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role),\n array['Error 401: Unauthorized']\n )::realtime.wal_rls;\n\n else\n output = jsonb_build_object(\n 'schema', wal ->> 'schema',\n 'table', wal ->> 'table',\n 'type', action,\n 'commit_timestamp', to_char(\n ((wal ->> 'timestamp')::timestamptz at time zone 'utc'),\n 'YYYY-MM-DD\"T\"HH24:MI:SS.MS\"Z\"'\n ),\n 'columns', (\n select\n jsonb_agg(\n jsonb_build_object(\n 'name', pa.attname,\n 'type', pt.typname\n )\n order by pa.attnum asc\n )\n from\n pg_attribute pa\n join pg_type pt\n on pa.atttypid = pt.oid\n where\n attrelid = entity_\n and attnum > 0\n and pg_catalog.has_column_privilege(working_role, entity_, pa.attname, 'SELECT')\n )\n )\n -- Add \"record\" key for insert and update\n || case\n when action in ('INSERT', 'UPDATE') then\n jsonb_build_object(\n 'record',\n (\n select\n jsonb_object_agg(\n -- if unchanged toast, get column name and value from old record\n coalesce((c).name, (oc).name),\n case\n when (c).name is null then (oc).value\n else (c).value\n end\n )\n from\n unnest(columns) c\n full outer join unnest(old_columns) oc\n on (c).name = (oc).name\n where\n coalesce((c).is_selectable, (oc).is_selectable)\n and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))\n )\n )\n else '{}'::jsonb\n end\n -- Add \"old_record\" key for update and delete\n || case\n when action = 'UPDATE' then\n jsonb_build_object(\n 'old_record',\n (\n select jsonb_object_agg((c).name, (c).value)\n from unnest(old_columns) c\n where\n (c).is_selectable\n and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))\n )\n )\n when action = 'DELETE' then\n jsonb_build_object(\n 'old_record',\n (\n select jsonb_object_agg((c).name, (c).value)\n from unnest(old_columns) c\n where\n (c).is_selectable\n and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64))\n and ( not is_rls_enabled or (c).is_pkey ) -- if RLS enabled, we can't secure deletes so filter to pkey\n )\n )\n else '{}'::jsonb\n end;\n\n -- Create the prepared statement\n if is_rls_enabled and action <> 'DELETE' then\n if (select 1 from pg_prepared_statements where name = 'walrus_rls_stmt' limit 1) > 0 then\n deallocate walrus_rls_stmt;\n end if;\n execute realtime.build_prepared_statement_sql('walrus_rls_stmt', entity_, columns);\n end if;\n\n visible_to_subscription_ids = '{}';\n\n for subscription_id, claims in (\n select\n subs.subscription_id,\n subs.claims\n from\n unnest(subscriptions) subs\n where\n subs.entity = entity_\n and subs.claims_role = working_role\n and (\n realtime.is_visible_through_filters(columns, subs.filters)\n or (\n action = 'DELETE'\n and realtime.is_visible_through_filters(old_columns, subs.filters)\n )\n )\n ) loop\n\n if not is_rls_enabled or action = 'DELETE' then\n visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;\n else\n -- Check if RLS allows the role to see the record\n perform\n -- Trim leading and trailing quotes from working_role because set_config\n -- doesn't recognize the role as valid if they are included\n set_config('role', trim(both '\"' from working_role::text), true),\n set_config('request.jwt.claims', claims::text, true);\n\n execute 'execute walrus_rls_stmt' into subscription_has_access;\n\n if subscription_has_access then\n visible_to_subscription_ids = visible_to_subscription_ids || subscription_id;\n end if;\n end if;\n end loop;\n\n perform set_config('role', null, true);\n\n return next (\n output,\n is_rls_enabled,\n visible_to_subscription_ids,\n case\n when error_record_exceeds_max_size then array['Error 413: Payload Too Large']\n else '{}'\n end\n )::realtime.wal_rls;\n\n end if;\nend loop;\n\nperform set_config('role', null, true);\nend;\n$function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.broadcast_changes(text,text,text,text,text,record,record,text)": {
+ "schema": "realtime",
+ "name": "broadcast_changes",
+ "kind": "f",
+ "return_type": "void",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 8,
+ "argument_default_count": 1,
+ "argument_names": [
+ "topic_name",
+ "event_name",
+ "operation",
+ "table_name",
+ "table_schema",
+ "new",
+ "old",
+ "level"
+ ],
+ "argument_types": [
+ "text",
+ "text",
+ "text",
+ "text",
+ "text",
+ "record",
+ "record",
+ "text"
+ ],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": "'ROW'::text",
+ "source_code": "\nDECLARE\n -- Declare a variable to hold the JSONB representation of the row\n row_data jsonb := '{}'::jsonb;\nBEGIN\n IF level = 'STATEMENT' THEN\n RAISE EXCEPTION 'function can only be triggered for each row, not for each statement';\n END IF;\n -- Check the operation type and handle accordingly\n IF operation = 'INSERT' OR operation = 'UPDATE' OR operation = 'DELETE' THEN\n row_data := jsonb_build_object('old_record', OLD, 'record', NEW, 'operation', operation, 'table', table_name, 'schema', table_schema);\n PERFORM realtime.send (row_data, event_name, topic_name);\n ELSE\n RAISE EXCEPTION 'Unexpected operation type: %', operation;\n END IF;\nEXCEPTION\n WHEN OTHERS THEN\n RAISE EXCEPTION 'Failed to process the row: %', SQLERRM;\nEND;\n\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.broadcast_changes(topic_name text, event_name text, operation text, table_name text, table_schema text, new record, old record, level text DEFAULT 'ROW'::text)\n RETURNS void\n LANGUAGE plpgsql\nAS $function$\nDECLARE\n -- Declare a variable to hold the JSONB representation of the row\n row_data jsonb := '{}'::jsonb;\nBEGIN\n IF level = 'STATEMENT' THEN\n RAISE EXCEPTION 'function can only be triggered for each row, not for each statement';\n END IF;\n -- Check the operation type and handle accordingly\n IF operation = 'INSERT' OR operation = 'UPDATE' OR operation = 'DELETE' THEN\n row_data := jsonb_build_object('old_record', OLD, 'record', NEW, 'operation', operation, 'table', table_name, 'schema', table_schema);\n PERFORM realtime.send (row_data, event_name, topic_name);\n ELSE\n RAISE EXCEPTION 'Unexpected operation type: %', operation;\n END IF;\nEXCEPTION\n WHEN OTHERS THEN\n RAISE EXCEPTION 'Failed to process the row: %', SQLERRM;\nEND;\n\n$function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])": {
+ "schema": "realtime",
+ "name": "build_prepared_statement_sql",
+ "kind": "f",
+ "return_type": "text",
+ "return_type_schema": "pg_catalog",
+ "language": "sql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 3,
+ "argument_default_count": 0,
+ "argument_names": [
+ "prepared_statement_name",
+ "entity",
+ "columns"
+ ],
+ "argument_types": [
+ "text",
+ "regclass",
+ "realtime.wal_column[]"
+ ],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\n /*\n Builds a sql string that, if executed, creates a prepared statement to\n tests retrive a row from *entity* by its primary key columns.\n Example\n select realtime.build_prepared_statement_sql('public.notes', '{\"id\"}'::text[], '{\"bigint\"}'::text[])\n */\n select\n 'prepare ' || prepared_statement_name || ' as\n select\n exists(\n select\n 1\n from\n ' || entity || '\n where\n ' || string_agg(quote_ident(pkc.name) || '=' || quote_nullable(pkc.value #>> '{}') , ' and ') || '\n )'\n from\n unnest(columns) pkc\n where\n pkc.is_pkey\n group by\n entity\n ",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[])\n RETURNS text\n LANGUAGE sql\nAS $function$\n /*\n Builds a sql string that, if executed, creates a prepared statement to\n tests retrive a row from *entity* by its primary key columns.\n Example\n select realtime.build_prepared_statement_sql('public.notes', '{\"id\"}'::text[], '{\"bigint\"}'::text[])\n */\n select\n 'prepare ' || prepared_statement_name || ' as\n select\n exists(\n select\n 1\n from\n ' || entity || '\n where\n ' || string_agg(quote_ident(pkc.name) || '=' || quote_nullable(pkc.value #>> '{}') , ' and ') || '\n )'\n from\n unnest(columns) pkc\n where\n pkc.is_pkey\n group by\n entity\n $function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)": {
+ "schema": "realtime",
+ "name": "check_equality_op",
+ "kind": "f",
+ "return_type": "boolean",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "i",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 4,
+ "argument_default_count": 0,
+ "argument_names": [
+ "op",
+ "type_",
+ "val_1",
+ "val_2"
+ ],
+ "argument_types": [
+ "realtime.equality_op",
+ "regtype",
+ "text",
+ "text"
+ ],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\n /*\n Casts *val_1* and *val_2* as type *type_* and check the *op* condition for truthiness\n */\n declare\n op_symbol text = (\n case\n when op = 'eq' then '='\n when op = 'neq' then '!='\n when op = 'lt' then '<'\n when op = 'lte' then '<='\n when op = 'gt' then '>'\n when op = 'gte' then '>='\n when op = 'in' then '= any'\n else 'UNKNOWN OP'\n end\n );\n res boolean;\n begin\n execute format(\n 'select %L::'|| type_::text || ' ' || op_symbol\n || ' ( %L::'\n || (\n case\n when op = 'in' then type_::text || '[]'\n else type_::text end\n )\n || ')', val_1, val_2) into res;\n return res;\n end;\n ",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text)\n RETURNS boolean\n LANGUAGE plpgsql\n IMMUTABLE\nAS $function$\n /*\n Casts *val_1* and *val_2* as type *type_* and check the *op* condition for truthiness\n */\n declare\n op_symbol text = (\n case\n when op = 'eq' then '='\n when op = 'neq' then '!='\n when op = 'lt' then '<'\n when op = 'lte' then '<='\n when op = 'gt' then '>'\n when op = 'gte' then '>='\n when op = 'in' then '= any'\n else 'UNKNOWN OP'\n end\n );\n res boolean;\n begin\n execute format(\n 'select %L::'|| type_::text || ' ' || op_symbol\n || ' ( %L::'\n || (\n case\n when op = 'in' then type_::text || '[]'\n else type_::text end\n )\n || ')', val_1, val_2) into res;\n return res;\n end;\n $function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])": {
+ "schema": "realtime",
+ "name": "is_visible_through_filters",
+ "kind": "f",
+ "return_type": "boolean",
+ "return_type_schema": "pg_catalog",
+ "language": "sql",
+ "security_definer": false,
+ "volatility": "i",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 2,
+ "argument_default_count": 0,
+ "argument_names": [
+ "columns",
+ "filters"
+ ],
+ "argument_types": [
+ "realtime.wal_column[]",
+ "realtime.user_defined_filter[]"
+ ],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\n /*\n Should the record be visible (true) or filtered out (false) after *filters* are applied\n */\n select\n -- Default to allowed when no filters present\n $2 is null -- no filters. this should not happen because subscriptions has a default\n or array_length($2, 1) is null -- array length of an empty array is null\n or bool_and(\n coalesce(\n realtime.check_equality_op(\n op:=f.op,\n type_:=coalesce(\n col.type_oid::regtype, -- null when wal2json version <= 2.4\n col.type_name::regtype\n ),\n -- cast jsonb to text\n val_1:=col.value #>> '{}',\n val_2:=f.value\n ),\n false -- if null, filter does not match\n )\n )\n from\n unnest(filters) f\n join unnest(columns) col\n on f.column_name = col.name;\n ",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[])\n RETURNS boolean\n LANGUAGE sql\n IMMUTABLE\nAS $function$\n /*\n Should the record be visible (true) or filtered out (false) after *filters* are applied\n */\n select\n -- Default to allowed when no filters present\n $2 is null -- no filters. this should not happen because subscriptions has a default\n or array_length($2, 1) is null -- array length of an empty array is null\n or bool_and(\n coalesce(\n realtime.check_equality_op(\n op:=f.op,\n type_:=coalesce(\n col.type_oid::regtype, -- null when wal2json version <= 2.4\n col.type_name::regtype\n ),\n -- cast jsonb to text\n val_1:=col.value #>> '{}',\n val_2:=f.value\n ),\n false -- if null, filter does not match\n )\n )\n from\n unnest(filters) f\n join unnest(columns) col\n on f.column_name = col.name;\n $function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.list_changes(name,name,integer,integer)": {
+ "schema": "realtime",
+ "name": "list_changes",
+ "kind": "f",
+ "return_type": "record",
+ "return_type_schema": "pg_catalog",
+ "language": "sql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 1000,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": true,
+ "argument_count": 4,
+ "argument_default_count": 0,
+ "argument_names": [
+ "publication",
+ "slot_name",
+ "max_changes",
+ "max_record_bytes",
+ "wal",
+ "is_rls_enabled",
+ "subscription_ids",
+ "errors",
+ "slot_changes_count"
+ ],
+ "argument_types": [
+ "name",
+ "name",
+ "integer",
+ "integer"
+ ],
+ "all_argument_types": [
+ "name",
+ "name",
+ "integer",
+ "integer",
+ "jsonb",
+ "boolean",
+ "uuid[]",
+ "text[]",
+ "bigint"
+ ],
+ "argument_modes": [
+ "i",
+ "i",
+ "i",
+ "i",
+ "t",
+ "t",
+ "t",
+ "t",
+ "t"
+ ],
+ "argument_defaults": null,
+ "source_code": "\n WITH pub AS (\n SELECT\n concat_ws(\n ',',\n CASE WHEN bool_or(pubinsert) THEN 'insert' ELSE NULL END,\n CASE WHEN bool_or(pubupdate) THEN 'update' ELSE NULL END,\n CASE WHEN bool_or(pubdelete) THEN 'delete' ELSE NULL END\n ) AS w2j_actions,\n coalesce(\n string_agg(\n realtime.quote_wal2json(format('%I.%I', schemaname, tablename)::regclass),\n ','\n ) filter (WHERE ppt.tablename IS NOT NULL AND ppt.tablename NOT LIKE '% %'),\n ''\n ) AS w2j_add_tables\n FROM pg_publication pp\n LEFT JOIN pg_publication_tables ppt ON pp.pubname = ppt.pubname\n WHERE pp.pubname = publication\n GROUP BY pp.pubname\n LIMIT 1\n ),\n -- MATERIALIZED ensures pg_logical_slot_get_changes is called exactly once\n w2j AS MATERIALIZED (\n SELECT x.*, pub.w2j_add_tables\n FROM pub,\n pg_logical_slot_get_changes(\n slot_name, null, max_changes,\n 'include-pk', 'true',\n 'include-transaction', 'false',\n 'include-timestamp', 'true',\n 'include-type-oids', 'true',\n 'format-version', '2',\n 'actions', pub.w2j_actions,\n 'add-tables', pub.w2j_add_tables\n ) x\n ),\n -- Count raw slot entries before apply_rls/subscription filter\n slot_count AS (\n SELECT count(*)::bigint AS cnt\n FROM w2j\n WHERE w2j.w2j_add_tables <> ''\n ),\n -- Apply RLS and filter as before\n rls_filtered AS (\n SELECT xyz.wal, xyz.is_rls_enabled, xyz.subscription_ids, xyz.errors\n FROM w2j,\n realtime.apply_rls(\n wal := w2j.data::jsonb,\n max_record_bytes := max_record_bytes\n ) xyz(wal, is_rls_enabled, subscription_ids, errors)\n WHERE w2j.w2j_add_tables <> ''\n AND xyz.subscription_ids[1] IS NOT NULL\n )\n -- Real rows with slot count attached\n SELECT rf.wal, rf.is_rls_enabled, rf.subscription_ids, rf.errors, sc.cnt\n FROM rls_filtered rf, slot_count sc\n\n UNION ALL\n\n -- Sentinel row: always returned when no real rows exist so Elixir can\n -- always read slot_changes_count. Identified by wal IS NULL.\n SELECT null, null, null, null, sc.cnt\n FROM slot_count sc\n WHERE NOT EXISTS (SELECT 1 FROM rls_filtered)\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer)\n RETURNS TABLE(wal jsonb, is_rls_enabled boolean, subscription_ids uuid[], errors text[], slot_changes_count bigint)\n LANGUAGE sql\n SET log_min_messages TO 'fatal'\nAS $function$\n WITH pub AS (\n SELECT\n concat_ws(\n ',',\n CASE WHEN bool_or(pubinsert) THEN 'insert' ELSE NULL END,\n CASE WHEN bool_or(pubupdate) THEN 'update' ELSE NULL END,\n CASE WHEN bool_or(pubdelete) THEN 'delete' ELSE NULL END\n ) AS w2j_actions,\n coalesce(\n string_agg(\n realtime.quote_wal2json(format('%I.%I', schemaname, tablename)::regclass),\n ','\n ) filter (WHERE ppt.tablename IS NOT NULL AND ppt.tablename NOT LIKE '% %'),\n ''\n ) AS w2j_add_tables\n FROM pg_publication pp\n LEFT JOIN pg_publication_tables ppt ON pp.pubname = ppt.pubname\n WHERE pp.pubname = publication\n GROUP BY pp.pubname\n LIMIT 1\n ),\n -- MATERIALIZED ensures pg_logical_slot_get_changes is called exactly once\n w2j AS MATERIALIZED (\n SELECT x.*, pub.w2j_add_tables\n FROM pub,\n pg_logical_slot_get_changes(\n slot_name, null, max_changes,\n 'include-pk', 'true',\n 'include-transaction', 'false',\n 'include-timestamp', 'true',\n 'include-type-oids', 'true',\n 'format-version', '2',\n 'actions', pub.w2j_actions,\n 'add-tables', pub.w2j_add_tables\n ) x\n ),\n -- Count raw slot entries before apply_rls/subscription filter\n slot_count AS (\n SELECT count(*)::bigint AS cnt\n FROM w2j\n WHERE w2j.w2j_add_tables <> ''\n ),\n -- Apply RLS and filter as before\n rls_filtered AS (\n SELECT xyz.wal, xyz.is_rls_enabled, xyz.subscription_ids, xyz.errors\n FROM w2j,\n realtime.apply_rls(\n wal := w2j.data::jsonb,\n max_record_bytes := max_record_bytes\n ) xyz(wal, is_rls_enabled, subscription_ids, errors)\n WHERE w2j.w2j_add_tables <> ''\n AND xyz.subscription_ids[1] IS NOT NULL\n )\n -- Real rows with slot count attached\n SELECT rf.wal, rf.is_rls_enabled, rf.subscription_ids, rf.errors, sc.cnt\n FROM rls_filtered rf, slot_count sc\n\n UNION ALL\n\n -- Sentinel row: always returned when no real rows exist so Elixir can\n -- always read slot_changes_count. Identified by wal IS NULL.\n SELECT null, null, null, null, sc.cnt\n FROM slot_count sc\n WHERE NOT EXISTS (SELECT 1 FROM rls_filtered)\n$function$\n",
+ "config": [
+ "log_min_messages=fatal"
+ ],
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.quote_wal2json(regclass)": {
+ "schema": "realtime",
+ "name": "quote_wal2json",
+ "kind": "f",
+ "return_type": "text",
+ "return_type_schema": "pg_catalog",
+ "language": "sql",
+ "security_definer": false,
+ "volatility": "i",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": true,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 1,
+ "argument_default_count": 0,
+ "argument_names": [
+ "entity"
+ ],
+ "argument_types": [
+ "regclass"
+ ],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\n select\n (\n select string_agg('' || ch,'')\n from unnest(string_to_array(nsp.nspname::text, null)) with ordinality x(ch, idx)\n where\n not (x.idx = 1 and x.ch = '\"')\n and not (\n x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)\n and x.ch = '\"'\n )\n )\n || '.'\n || (\n select string_agg('' || ch,'')\n from unnest(string_to_array(pc.relname::text, null)) with ordinality x(ch, idx)\n where\n not (x.idx = 1 and x.ch = '\"')\n and not (\n x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)\n and x.ch = '\"'\n )\n )\n from\n pg_class pc\n join pg_namespace nsp\n on pc.relnamespace = nsp.oid\n where\n pc.oid = entity\n ",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.quote_wal2json(entity regclass)\n RETURNS text\n LANGUAGE sql\n IMMUTABLE STRICT\nAS $function$\n select\n (\n select string_agg('' || ch,'')\n from unnest(string_to_array(nsp.nspname::text, null)) with ordinality x(ch, idx)\n where\n not (x.idx = 1 and x.ch = '\"')\n and not (\n x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)\n and x.ch = '\"'\n )\n )\n || '.'\n || (\n select string_agg('' || ch,'')\n from unnest(string_to_array(pc.relname::text, null)) with ordinality x(ch, idx)\n where\n not (x.idx = 1 and x.ch = '\"')\n and not (\n x.idx = array_length(string_to_array(nsp.nspname::text, null), 1)\n and x.ch = '\"'\n )\n )\n from\n pg_class pc\n join pg_namespace nsp\n on pc.relnamespace = nsp.oid\n where\n pc.oid = entity\n $function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.send(jsonb,text,text,boolean)": {
+ "schema": "realtime",
+ "name": "send",
+ "kind": "f",
+ "return_type": "void",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 4,
+ "argument_default_count": 1,
+ "argument_names": [
+ "payload",
+ "event",
+ "topic",
+ "private"
+ ],
+ "argument_types": [
+ "jsonb",
+ "text",
+ "text",
+ "boolean"
+ ],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": "true",
+ "source_code": "\nDECLARE\n generated_id uuid;\n final_payload jsonb;\nBEGIN\n BEGIN\n -- Generate a new UUID for the id\n generated_id := gen_random_uuid();\n\n -- Check if payload has an 'id' key, if not, add the generated UUID\n IF payload ? 'id' THEN\n final_payload := payload;\n ELSE\n final_payload := jsonb_set(payload, '{id}', to_jsonb(generated_id));\n END IF;\n\n -- Set the topic configuration\n EXECUTE format('SET LOCAL realtime.topic TO %L', topic);\n\n -- Attempt to insert the message\n INSERT INTO realtime.messages (id, payload, event, topic, private, extension)\n VALUES (generated_id, final_payload, event, topic, private, 'broadcast');\n EXCEPTION\n WHEN OTHERS THEN\n -- Capture and notify the error\n RAISE WARNING 'ErrorSendingBroadcastMessage: %', SQLERRM;\n END;\nEND;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean DEFAULT true)\n RETURNS void\n LANGUAGE plpgsql\nAS $function$\nDECLARE\n generated_id uuid;\n final_payload jsonb;\nBEGIN\n BEGIN\n -- Generate a new UUID for the id\n generated_id := gen_random_uuid();\n\n -- Check if payload has an 'id' key, if not, add the generated UUID\n IF payload ? 'id' THEN\n final_payload := payload;\n ELSE\n final_payload := jsonb_set(payload, '{id}', to_jsonb(generated_id));\n END IF;\n\n -- Set the topic configuration\n EXECUTE format('SET LOCAL realtime.topic TO %L', topic);\n\n -- Attempt to insert the message\n INSERT INTO realtime.messages (id, payload, event, topic, private, extension)\n VALUES (generated_id, final_payload, event, topic, private, 'broadcast');\n EXCEPTION\n WHEN OTHERS THEN\n -- Capture and notify the error\n RAISE WARNING 'ErrorSendingBroadcastMessage: %', SQLERRM;\n END;\nEND;\n$function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.subscription_check_filters()": {
+ "schema": "realtime",
+ "name": "subscription_check_filters",
+ "kind": "f",
+ "return_type": "trigger",
+ "return_type_schema": "pg_catalog",
+ "language": "plpgsql",
+ "security_definer": false,
+ "volatility": "v",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\n /*\n Validates that the user defined filters for a subscription:\n - refer to valid columns that the claimed role may access\n - values are coercable to the correct column type\n */\n declare\n col_names text[] = coalesce(\n array_agg(c.column_name order by c.ordinal_position),\n '{}'::text[]\n )\n from\n information_schema.columns c\n where\n format('%I.%I', c.table_schema, c.table_name)::regclass = new.entity\n and pg_catalog.has_column_privilege(\n (new.claims ->> 'role'),\n format('%I.%I', c.table_schema, c.table_name)::regclass,\n c.column_name,\n 'SELECT'\n );\n filter realtime.user_defined_filter;\n col_type regtype;\n\n in_val jsonb;\n begin\n for filter in select * from unnest(new.filters) loop\n -- Filtered column is valid\n if not filter.column_name = any(col_names) then\n raise exception 'invalid column for filter %', filter.column_name;\n end if;\n\n -- Type is sanitized and safe for string interpolation\n col_type = (\n select atttypid::regtype\n from pg_catalog.pg_attribute\n where attrelid = new.entity\n and attname = filter.column_name\n );\n if col_type is null then\n raise exception 'failed to lookup type for column %', filter.column_name;\n end if;\n\n -- Set maximum number of entries for in filter\n if filter.op = 'in'::realtime.equality_op then\n in_val = realtime.cast(filter.value, (col_type::text || '[]')::regtype);\n if coalesce(jsonb_array_length(in_val), 0) > 100 then\n raise exception 'too many values for `in` filter. Maximum 100';\n end if;\n else\n -- raises an exception if value is not coercable to type\n perform realtime.cast(filter.value, col_type);\n end if;\n\n end loop;\n\n -- Apply consistent order to filters so the unique constraint on\n -- (subscription_id, entity, filters) can't be tricked by a different filter order\n new.filters = coalesce(\n array_agg(f order by f.column_name, f.op, f.value),\n '{}'\n ) from unnest(new.filters) f;\n\n return new;\n end;\n ",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.subscription_check_filters()\n RETURNS trigger\n LANGUAGE plpgsql\nAS $function$\n /*\n Validates that the user defined filters for a subscription:\n - refer to valid columns that the claimed role may access\n - values are coercable to the correct column type\n */\n declare\n col_names text[] = coalesce(\n array_agg(c.column_name order by c.ordinal_position),\n '{}'::text[]\n )\n from\n information_schema.columns c\n where\n format('%I.%I', c.table_schema, c.table_name)::regclass = new.entity\n and pg_catalog.has_column_privilege(\n (new.claims ->> 'role'),\n format('%I.%I', c.table_schema, c.table_name)::regclass,\n c.column_name,\n 'SELECT'\n );\n filter realtime.user_defined_filter;\n col_type regtype;\n\n in_val jsonb;\n begin\n for filter in select * from unnest(new.filters) loop\n -- Filtered column is valid\n if not filter.column_name = any(col_names) then\n raise exception 'invalid column for filter %', filter.column_name;\n end if;\n\n -- Type is sanitized and safe for string interpolation\n col_type = (\n select atttypid::regtype\n from pg_catalog.pg_attribute\n where attrelid = new.entity\n and attname = filter.column_name\n );\n if col_type is null then\n raise exception 'failed to lookup type for column %', filter.column_name;\n end if;\n\n -- Set maximum number of entries for in filter\n if filter.op = 'in'::realtime.equality_op then\n in_val = realtime.cast(filter.value, (col_type::text || '[]')::regtype);\n if coalesce(jsonb_array_length(in_val), 0) > 100 then\n raise exception 'too many values for `in` filter. Maximum 100';\n end if;\n else\n -- raises an exception if value is not coercable to type\n perform realtime.cast(filter.value, col_type);\n end if;\n\n end loop;\n\n -- Apply consistent order to filters so the unique constraint on\n -- (subscription_id, entity, filters) can't be tricked by a different filter order\n new.filters = coalesce(\n array_agg(f order by f.column_name, f.op, f.value),\n '{}'\n ) from unnest(new.filters) f;\n\n return new;\n end;\n $function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.to_regrole(text)": {
+ "schema": "realtime",
+ "name": "to_regrole",
+ "kind": "f",
+ "return_type": "regrole",
+ "return_type_schema": "pg_catalog",
+ "language": "sql",
+ "security_definer": false,
+ "volatility": "i",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 1,
+ "argument_default_count": 0,
+ "argument_names": [
+ "role_name"
+ ],
+ "argument_types": [
+ "text"
+ ],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": " select role_name::regrole ",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.to_regrole(role_name text)\n RETURNS regrole\n LANGUAGE sql\n IMMUTABLE\nAS $function$ select role_name::regrole $function$\n",
+ "config": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "procedure:realtime.topic()": {
+ "schema": "realtime",
+ "name": "topic",
+ "kind": "f",
+ "return_type": "text",
+ "return_type_schema": "pg_catalog",
+ "language": "sql",
+ "security_definer": false,
+ "volatility": "s",
+ "parallel_safety": "u",
+ "execution_cost": 100,
+ "result_rows": 0,
+ "is_strict": false,
+ "leakproof": false,
+ "returns_set": false,
+ "argument_count": 0,
+ "argument_default_count": 0,
+ "argument_names": null,
+ "argument_types": [],
+ "all_argument_types": [],
+ "argument_modes": null,
+ "argument_defaults": null,
+ "source_code": "\nselect nullif(current_setting('realtime.topic', true), '')::text;\n",
+ "binary_path": null,
+ "sql_body": null,
+ "definition": "CREATE OR REPLACE FUNCTION realtime.topic()\n RETURNS text\n LANGUAGE sql\n STABLE\nAS $function$\nselect nullif(current_setting('realtime.topic', true), '')::text;\n$function$\n",
+ "config": null,
+ "owner": "supabase_realtime_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "EXECUTE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ }
+ },
+ "indexes": {
+ "index:auth.audit_log_entries.audit_log_entries_pkey": {
+ "schema": "auth",
+ "table_name": "audit_log_entries",
+ "name": "audit_log_entries_pkey",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": true,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 2
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX audit_log_entries_pkey ON auth.audit_log_entries USING btree (id)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.audit_log_entries.audit_logs_instance_id_idx": {
+ "schema": "auth",
+ "table_name": "audit_log_entries",
+ "name": "audit_logs_instance_id_idx",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": false,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": false,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE INDEX audit_logs_instance_id_idx ON auth.audit_log_entries USING btree (instance_id)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.instances.instances_pkey": {
+ "schema": "auth",
+ "table_name": "instances",
+ "name": "instances_pkey",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": true,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX instances_pkey ON auth.instances USING btree (id)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.refresh_tokens.refresh_tokens_pkey": {
+ "schema": "auth",
+ "table_name": "refresh_tokens",
+ "name": "refresh_tokens_pkey",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": true,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 2
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX refresh_tokens_pkey ON auth.refresh_tokens USING btree (id)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.refresh_tokens.refresh_tokens_token_idx": {
+ "schema": "auth",
+ "table_name": "refresh_tokens",
+ "name": "refresh_tokens_token_idx",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": false,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 3
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": false,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE INDEX refresh_tokens_token_idx ON auth.refresh_tokens USING btree (token)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.refresh_tokens.refresh_tokens_instance_id_user_id_idx": {
+ "schema": "auth",
+ "table_name": "refresh_tokens",
+ "name": "refresh_tokens_instance_id_user_id_idx",
+ "storage_params": [],
+ "statistics_target": [
+ -1,
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": false,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1,
+ 4
+ ],
+ "column_collations": [
+ null,
+ null
+ ],
+ "operator_classes": [
+ "default",
+ "default"
+ ],
+ "column_options": [
+ 0,
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": false,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE INDEX refresh_tokens_instance_id_user_id_idx ON auth.refresh_tokens USING btree (instance_id, user_id)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.refresh_tokens.refresh_tokens_instance_id_idx": {
+ "schema": "auth",
+ "table_name": "refresh_tokens",
+ "name": "refresh_tokens_instance_id_idx",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": false,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": false,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE INDEX refresh_tokens_instance_id_idx ON auth.refresh_tokens USING btree (instance_id)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.schema_migrations.schema_migrations_pkey": {
+ "schema": "auth",
+ "table_name": "schema_migrations",
+ "name": "schema_migrations_pkey",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": true,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX schema_migrations_pkey ON auth.schema_migrations USING btree (version)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.users.users_pkey": {
+ "schema": "auth",
+ "table_name": "users",
+ "name": "users_pkey",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": true,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 2
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX users_pkey ON auth.users USING btree (id)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.users.users_email_key": {
+ "schema": "auth",
+ "table_name": "users",
+ "name": "users_email_key",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 5
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX users_email_key ON auth.users USING btree (email)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.users.users_instance_id_email_idx": {
+ "schema": "auth",
+ "table_name": "users",
+ "name": "users_instance_id_email_idx",
+ "storage_params": [],
+ "statistics_target": [
+ -1,
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": false,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1,
+ 5
+ ],
+ "column_collations": [
+ null,
+ null
+ ],
+ "operator_classes": [
+ "default",
+ "default"
+ ],
+ "column_options": [
+ 0,
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": false,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE INDEX users_instance_id_email_idx ON auth.users USING btree (instance_id, email)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:auth.users.users_instance_id_idx": {
+ "schema": "auth",
+ "table_name": "users",
+ "name": "users_instance_id_idx",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": false,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": false,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE INDEX users_instance_id_idx ON auth.users USING btree (instance_id)",
+ "comment": null,
+ "owner": "supabase_auth_admin"
+ },
+ "index:public.test_tenant.test_tenant_pkey": {
+ "schema": "public",
+ "table_name": "test_tenant",
+ "name": "test_tenant_pkey",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": true,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX test_tenant_pkey ON public.test_tenant USING btree (id)",
+ "comment": null,
+ "owner": "supabase_admin"
+ },
+ "index:realtime.messages.messages_pkey": {
+ "schema": "realtime",
+ "table_name": "messages",
+ "name": "messages_pkey",
+ "storage_params": [],
+ "statistics_target": [
+ -1,
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": true,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 10,
+ 9
+ ],
+ "column_collations": [
+ null,
+ null
+ ],
+ "operator_classes": [
+ "default",
+ "default"
+ ],
+ "column_options": [
+ 0,
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "p",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": true,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX messages_pkey ON ONLY realtime.messages USING btree (id, inserted_at)",
+ "comment": null,
+ "owner": "supabase_realtime_admin"
+ },
+ "index:realtime.messages.messages_inserted_at_topic_index": {
+ "schema": "realtime",
+ "table_name": "messages",
+ "name": "messages_inserted_at_topic_index",
+ "storage_params": [],
+ "statistics_target": [
+ -1,
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": false,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 9,
+ 3
+ ],
+ "column_collations": [
+ null,
+ null
+ ],
+ "operator_classes": [
+ "default",
+ "default"
+ ],
+ "column_options": [
+ 3,
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": "((extension = 'broadcast'::text) AND (private IS TRUE))",
+ "table_relkind": "p",
+ "is_owned_by_constraint": false,
+ "is_partitioned_index": true,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE INDEX messages_inserted_at_topic_index ON ONLY realtime.messages USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE",
+ "comment": null,
+ "owner": "supabase_realtime_admin"
+ },
+ "index:realtime.schema_migrations.schema_migrations_pkey": {
+ "schema": "realtime",
+ "table_name": "schema_migrations",
+ "name": "schema_migrations_pkey",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": true,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX schema_migrations_pkey ON realtime.schema_migrations USING btree (version)",
+ "comment": null,
+ "owner": "supabase_admin"
+ },
+ "index:realtime.subscription.pk_subscription": {
+ "schema": "realtime",
+ "table_name": "subscription",
+ "name": "pk_subscription",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": true,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 1
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": true,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX pk_subscription ON realtime.subscription USING btree (id)",
+ "comment": null,
+ "owner": "supabase_admin"
+ },
+ "index:realtime.subscription.ix_realtime_subscription_entity": {
+ "schema": "realtime",
+ "table_name": "subscription",
+ "name": "ix_realtime_subscription_entity",
+ "storage_params": [],
+ "statistics_target": [
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": false,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 4
+ ],
+ "column_collations": [
+ null
+ ],
+ "operator_classes": [
+ "default"
+ ],
+ "column_options": [
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": false,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE INDEX ix_realtime_subscription_entity ON realtime.subscription USING btree (entity)",
+ "comment": null,
+ "owner": "supabase_admin"
+ },
+ "index:realtime.subscription.subscription_subscription_id_entity_filters_action_filter_key": {
+ "schema": "realtime",
+ "table_name": "subscription",
+ "name": "subscription_subscription_id_entity_filters_action_filter_key",
+ "storage_params": [],
+ "statistics_target": [
+ -1,
+ -1,
+ -1,
+ -1
+ ],
+ "index_type": "btree",
+ "tablespace": null,
+ "is_unique": true,
+ "is_primary": false,
+ "is_exclusion": false,
+ "nulls_not_distinct": false,
+ "immediate": true,
+ "is_clustered": false,
+ "is_replica_identity": false,
+ "key_columns": [
+ 2,
+ 4,
+ 5,
+ 10
+ ],
+ "column_collations": [
+ null,
+ null,
+ null,
+ null
+ ],
+ "operator_classes": [
+ "default",
+ "default",
+ "pg_catalog.array_ops",
+ "default"
+ ],
+ "column_options": [
+ 0,
+ 0,
+ 0,
+ 0
+ ],
+ "index_expressions": null,
+ "partial_predicate": null,
+ "table_relkind": "r",
+ "is_owned_by_constraint": false,
+ "is_partitioned_index": false,
+ "is_index_partition": false,
+ "parent_index_name": null,
+ "definition": "CREATE UNIQUE INDEX subscription_subscription_id_entity_filters_action_filter_key ON realtime.subscription USING btree (subscription_id, entity, filters, action_filter)",
+ "comment": null,
+ "owner": "supabase_admin"
+ }
+ },
+ "materializedViews": {},
+ "subscriptions": {},
+ "publications": {
+ "publication:supabase_realtime": {
+ "name": "supabase_realtime",
+ "owner": "supabase_admin",
+ "comment": null,
+ "all_tables": false,
+ "publish_insert": true,
+ "publish_update": true,
+ "publish_delete": true,
+ "publish_truncate": true,
+ "publish_via_partition_root": false,
+ "tables": [
+ {
+ "schema": "public",
+ "name": "test_tenant",
+ "columns": null,
+ "row_filter": null
+ }
+ ],
+ "schemas": [],
+ "security_labels": []
+ }
+ },
+ "rlsPolicies": {},
+ "roles": {
+ "role:anon": {
+ "name": "anon",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": false,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": [
+ "statement_timeout=3s"
+ ],
+ "comment": null,
+ "members": [
+ {
+ "member": "authenticator",
+ "grantor": "supabase_admin",
+ "admin_option": false,
+ "inherit_option": false,
+ "set_option": true
+ },
+ {
+ "member": "postgres",
+ "grantor": "supabase_admin",
+ "admin_option": true,
+ "inherit_option": true,
+ "set_option": true
+ }
+ ],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:authenticated": {
+ "name": "authenticated",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": false,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": [
+ "statement_timeout=8s"
+ ],
+ "comment": null,
+ "members": [
+ {
+ "member": "authenticator",
+ "grantor": "supabase_admin",
+ "admin_option": false,
+ "inherit_option": false,
+ "set_option": true
+ },
+ {
+ "member": "postgres",
+ "grantor": "supabase_admin",
+ "admin_option": true,
+ "inherit_option": true,
+ "set_option": true
+ }
+ ],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:authenticator": {
+ "name": "authenticator",
+ "is_superuser": false,
+ "can_inherit": false,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": true,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": [
+ "session_preload_libraries=safeupdate",
+ "statement_timeout=8s",
+ "lock_timeout=8s"
+ ],
+ "comment": null,
+ "members": [
+ {
+ "member": "supabase_storage_admin",
+ "grantor": "supabase_admin",
+ "admin_option": false,
+ "inherit_option": false,
+ "set_option": true
+ },
+ {
+ "member": "postgres",
+ "grantor": "supabase_admin",
+ "admin_option": true,
+ "inherit_option": true,
+ "set_option": true
+ }
+ ],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "authenticator",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "authenticator",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "authenticator",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "authenticator",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "authenticator",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:dashboard_user": {
+ "name": "dashboard_user",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": true,
+ "can_create_databases": true,
+ "can_login": false,
+ "can_replicate": true,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": null,
+ "comment": null,
+ "members": [],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "dashboard_user",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "dashboard_user",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "dashboard_user",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "dashboard_user",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "dashboard_user",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:pgbouncer": {
+ "name": "pgbouncer",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": true,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": null,
+ "comment": null,
+ "members": [],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "pgbouncer",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "pgbouncer",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "pgbouncer",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "pgbouncer",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "pgbouncer",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:postgres": {
+ "name": "postgres",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": true,
+ "can_create_databases": true,
+ "can_login": true,
+ "can_replicate": true,
+ "connection_limit": -1,
+ "can_bypass_rls": true,
+ "config": [
+ "search_path=\"\\$user\", public, extensions"
+ ],
+ "comment": null,
+ "members": [],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": "public",
+ "objtype": "S",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "S",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "S",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "S",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "f",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "f",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "f",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "f",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "r",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "r",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "r",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "r",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "S",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "S",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "S",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "S",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "f",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "f",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "f",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "f",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "r",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "r",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "r",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "storage",
+ "objtype": "r",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ }
+ ],
+ "security_labels": []
+ },
+ "role:service_role": {
+ "name": "service_role",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": false,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": true,
+ "config": null,
+ "comment": null,
+ "members": [
+ {
+ "member": "authenticator",
+ "grantor": "supabase_admin",
+ "admin_option": false,
+ "inherit_option": false,
+ "set_option": true
+ },
+ {
+ "member": "postgres",
+ "grantor": "supabase_admin",
+ "admin_option": true,
+ "inherit_option": true,
+ "set_option": true
+ }
+ ],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:supabase_admin": {
+ "name": "supabase_admin",
+ "is_superuser": true,
+ "can_inherit": true,
+ "can_create_roles": true,
+ "can_create_databases": true,
+ "can_login": true,
+ "can_replicate": true,
+ "connection_limit": -1,
+ "can_bypass_rls": true,
+ "config": [
+ "search_path=\"\\$user\", public, auth, extensions",
+ "log_statement=none"
+ ],
+ "comment": null,
+ "members": [],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "supabase_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "supabase_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "supabase_admin",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "supabase_admin",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "supabase_admin",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": "public",
+ "objtype": "S",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "S",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "S",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "S",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "f",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "f",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "f",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "f",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "r",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "r",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "r",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "public",
+ "objtype": "r",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "extensions",
+ "objtype": "S",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": true
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": true
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": true
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "extensions",
+ "objtype": "f",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": true
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "extensions",
+ "objtype": "r",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": true
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": true
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": true
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": true
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": true
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": true
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": true
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": true
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "S",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "S",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "S",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "S",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "f",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "f",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "f",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "f",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "r",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "r",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "r",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql_public",
+ "objtype": "r",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "S",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "S",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "S",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "S",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "f",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "f",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "f",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "f",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "r",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "r",
+ "grantee": "anon",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "r",
+ "grantee": "authenticated",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "graphql",
+ "objtype": "r",
+ "grantee": "service_role",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ }
+ ],
+ "security_labels": []
+ },
+ "role:supabase_auth_admin": {
+ "name": "supabase_auth_admin",
+ "is_superuser": false,
+ "can_inherit": false,
+ "can_create_roles": true,
+ "can_create_databases": false,
+ "can_login": true,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": [
+ "search_path=auth",
+ "idle_in_transaction_session_timeout=60000",
+ "log_statement=none"
+ ],
+ "comment": null,
+ "members": [],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "supabase_auth_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "supabase_auth_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "supabase_auth_admin",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "supabase_auth_admin",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "supabase_auth_admin",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": "auth",
+ "objtype": "S",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "auth",
+ "objtype": "S",
+ "grantee": "dashboard_user",
+ "privileges": [
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "auth",
+ "objtype": "f",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "auth",
+ "objtype": "f",
+ "grantee": "dashboard_user",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "auth",
+ "objtype": "r",
+ "grantee": "postgres",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ },
+ {
+ "in_schema": "auth",
+ "objtype": "r",
+ "grantee": "dashboard_user",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": false
+ }
+ ],
+ "security_labels": []
+ },
+ "role:supabase_etl_admin": {
+ "name": "supabase_etl_admin",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": true,
+ "can_replicate": true,
+ "connection_limit": -1,
+ "can_bypass_rls": true,
+ "config": null,
+ "comment": null,
+ "members": [],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "supabase_etl_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "supabase_etl_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "supabase_etl_admin",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "supabase_etl_admin",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "supabase_etl_admin",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:supabase_read_only_user": {
+ "name": "supabase_read_only_user",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": true,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": true,
+ "config": [
+ "default_transaction_read_only=on"
+ ],
+ "comment": null,
+ "members": [],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "supabase_read_only_user",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "supabase_read_only_user",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "supabase_read_only_user",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "supabase_read_only_user",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "supabase_read_only_user",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:supabase_realtime_admin": {
+ "name": "supabase_realtime_admin",
+ "is_superuser": false,
+ "can_inherit": false,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": false,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": null,
+ "comment": null,
+ "members": [
+ {
+ "member": "postgres",
+ "grantor": "supabase_admin",
+ "admin_option": false,
+ "inherit_option": true,
+ "set_option": true
+ }
+ ],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "supabase_realtime_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "supabase_realtime_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "supabase_realtime_admin",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "supabase_realtime_admin",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "supabase_realtime_admin",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:supabase_replication_admin": {
+ "name": "supabase_replication_admin",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": true,
+ "can_replicate": true,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": null,
+ "comment": null,
+ "members": [],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "supabase_replication_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "supabase_replication_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "supabase_replication_admin",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "supabase_replication_admin",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "supabase_replication_admin",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:supabase_storage_admin": {
+ "name": "supabase_storage_admin",
+ "is_superuser": false,
+ "can_inherit": false,
+ "can_create_roles": true,
+ "can_create_databases": false,
+ "can_login": true,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": [
+ "search_path=storage",
+ "log_statement=none"
+ ],
+ "comment": null,
+ "members": [],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "supabase_storage_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "supabase_storage_admin",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "supabase_storage_admin",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "supabase_storage_admin",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "supabase_storage_admin",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ },
+ "role:supabase_superuser": {
+ "name": "supabase_superuser",
+ "is_superuser": false,
+ "can_inherit": true,
+ "can_create_roles": false,
+ "can_create_databases": false,
+ "can_login": false,
+ "can_replicate": false,
+ "connection_limit": -1,
+ "can_bypass_rls": false,
+ "config": null,
+ "comment": null,
+ "members": [
+ {
+ "member": "supabase_etl_admin",
+ "grantor": "supabase_admin",
+ "admin_option": false,
+ "inherit_option": true,
+ "set_option": true
+ },
+ {
+ "member": "postgres",
+ "grantor": "supabase_admin",
+ "admin_option": false,
+ "inherit_option": true,
+ "set_option": true
+ }
+ ],
+ "default_privileges": [
+ {
+ "in_schema": null,
+ "objtype": "S",
+ "grantee": "supabase_superuser",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "T",
+ "grantee": "supabase_superuser",
+ "privileges": [
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "PUBLIC",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "f",
+ "grantee": "supabase_superuser",
+ "privileges": [
+ {
+ "privilege": "EXECUTE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "n",
+ "grantee": "supabase_superuser",
+ "privileges": [
+ {
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ },
+ {
+ "in_schema": null,
+ "objtype": "r",
+ "grantee": "supabase_superuser",
+ "privileges": [
+ {
+ "privilege": "DELETE",
+ "grantable": false
+ },
+ {
+ "privilege": "INSERT",
+ "grantable": false
+ },
+ {
+ "privilege": "MAINTAIN",
+ "grantable": false
+ },
+ {
+ "privilege": "REFERENCES",
+ "grantable": false
+ },
+ {
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "privilege": "TRIGGER",
+ "grantable": false
+ },
+ {
+ "privilege": "TRUNCATE",
+ "grantable": false
+ },
+ {
+ "privilege": "UPDATE",
+ "grantable": false
+ }
+ ],
+ "is_implicit": true
+ }
+ ],
+ "security_labels": []
+ }
+ },
+ "schemas": {
+ "schema:auth": {
+ "name": "auth",
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "schema:extensions": {
+ "name": "extensions",
+ "owner": "postgres",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "postgres",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "schema:graphql": {
+ "name": "graphql",
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": true
+ },
+ {
+ "grantee": "anon",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "schema:graphql_public": {
+ "name": "graphql_public",
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": true
+ },
+ {
+ "grantee": "anon",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "schema:pgbouncer": {
+ "name": "pgbouncer",
+ "owner": "pgbouncer",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "pgbouncer",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "pgbouncer",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "schema:public": {
+ "name": "public",
+ "owner": "pg_database_owner",
+ "comment": "standard public schema",
+ "privileges": [
+ {
+ "grantee": "PUBLIC",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "pg_database_owner",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "pg_database_owner",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "schema:realtime": {
+ "name": "realtime",
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "schema:storage": {
+ "name": "storage",
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": true
+ },
+ {
+ "grantee": "anon",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_storage_admin",
+ "privilege": "CREATE",
+ "grantable": true
+ },
+ {
+ "grantee": "supabase_storage_admin",
+ "privilege": "USAGE",
+ "grantable": true
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ },
+ "schema:vault": {
+ "name": "vault",
+ "owner": "supabase_admin",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "CREATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": true
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "security_labels": []
+ }
+ },
+ "sequences": {
+ "sequence:auth.refresh_tokens_id_seq": {
+ "schema": "auth",
+ "name": "refresh_tokens_id_seq",
+ "data_type": "bigint",
+ "start_value": 1,
+ "minimum_value": "1",
+ "maximum_value": "9223372036854775807",
+ "increment": 1,
+ "cycle_option": false,
+ "cache_size": 1,
+ "persistence": "p",
+ "owned_by_schema": "auth",
+ "owned_by_table": "refresh_tokens",
+ "owned_by_column": "id",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "owner": "supabase_auth_admin",
+ "security_labels": []
+ },
+ "sequence:public.test_tenant_id_seq": {
+ "schema": "public",
+ "name": "test_tenant_id_seq",
+ "data_type": "integer",
+ "start_value": 1,
+ "minimum_value": "1",
+ "maximum_value": "2147483647",
+ "increment": 1,
+ "cycle_option": false,
+ "cache_size": 1,
+ "persistence": "p",
+ "owned_by_schema": "public",
+ "owned_by_table": "test_tenant",
+ "owned_by_column": "id",
+ "comment": null,
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "grantee": "anon",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "USAGE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "SELECT",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "UPDATE",
+ "grantable": false
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "USAGE",
+ "grantable": false
+ }
+ ],
+ "owner": "supabase_admin",
+ "security_labels": []
+ }
+ },
+ "tables": {
+ "table:auth.audit_log_entries": {
+ "schema": "auth",
+ "name": "audit_log_entries",
+ "persistence": "p",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": true,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "d",
+ "replica_identity_index": null,
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "partition_by": null,
+ "owner": "supabase_auth_admin",
+ "comment": "Auth: Audit trail for user actions.",
+ "parent_schema": null,
+ "parent_name": null,
+ "columns": [
+ {
+ "name": "instance_id",
+ "position": 1,
+ "data_type": "uuid",
+ "data_type_str": "uuid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "id",
+ "position": 2,
+ "data_type": "uuid",
+ "data_type_str": "uuid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "payload",
+ "position": 3,
+ "data_type": "json",
+ "data_type_str": "json",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "created_at",
+ "position": 4,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ }
+ ],
+ "constraints": [
+ {
+ "name": "audit_log_entries_pkey",
+ "constraint_type": "p",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "id"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_auth_admin",
+ "definition": "PRIMARY KEY (id)",
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "postgres",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ }
+ ],
+ "security_labels": []
+ },
+ "table:auth.instances": {
+ "schema": "auth",
+ "name": "instances",
+ "persistence": "p",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": true,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "d",
+ "replica_identity_index": null,
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "partition_by": null,
+ "owner": "supabase_auth_admin",
+ "comment": "Auth: Manages users across multiple sites.",
+ "parent_schema": null,
+ "parent_name": null,
+ "columns": [
+ {
+ "name": "id",
+ "position": 1,
+ "data_type": "uuid",
+ "data_type_str": "uuid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "uuid",
+ "position": 2,
+ "data_type": "uuid",
+ "data_type_str": "uuid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "raw_base_config",
+ "position": 3,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "created_at",
+ "position": 4,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "updated_at",
+ "position": 5,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ }
+ ],
+ "constraints": [
+ {
+ "name": "instances_pkey",
+ "constraint_type": "p",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "id"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_auth_admin",
+ "definition": "PRIMARY KEY (id)",
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "postgres",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ }
+ ],
+ "security_labels": []
+ },
+ "table:auth.refresh_tokens": {
+ "schema": "auth",
+ "name": "refresh_tokens",
+ "persistence": "p",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": true,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "d",
+ "replica_identity_index": null,
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "partition_by": null,
+ "owner": "supabase_auth_admin",
+ "comment": "Auth: Store of tokens used to refresh JWT tokens once they expire.",
+ "parent_schema": null,
+ "parent_name": null,
+ "columns": [
+ {
+ "name": "instance_id",
+ "position": 1,
+ "data_type": "uuid",
+ "data_type_str": "uuid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "id",
+ "position": 2,
+ "data_type": "bigint",
+ "data_type_str": "bigint",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": "nextval('auth.refresh_tokens_id_seq'::regclass)",
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "token",
+ "position": 3,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "user_id",
+ "position": 4,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "revoked",
+ "position": 5,
+ "data_type": "boolean",
+ "data_type_str": "boolean",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "created_at",
+ "position": 6,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "updated_at",
+ "position": 7,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ }
+ ],
+ "constraints": [
+ {
+ "name": "refresh_tokens_pkey",
+ "constraint_type": "p",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "id"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_auth_admin",
+ "definition": "PRIMARY KEY (id)",
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "postgres",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ }
+ ],
+ "security_labels": []
+ },
+ "table:auth.schema_migrations": {
+ "schema": "auth",
+ "name": "schema_migrations",
+ "persistence": "p",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": true,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "d",
+ "replica_identity_index": null,
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "partition_by": null,
+ "owner": "supabase_auth_admin",
+ "comment": "Auth: Manages updates to the auth system.",
+ "parent_schema": null,
+ "parent_name": null,
+ "columns": [
+ {
+ "name": "version",
+ "position": 1,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ }
+ ],
+ "constraints": [
+ {
+ "name": "schema_migrations_pkey",
+ "constraint_type": "p",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "version"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_auth_admin",
+ "definition": "PRIMARY KEY (version)",
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ }
+ ],
+ "security_labels": []
+ },
+ "table:auth.users": {
+ "schema": "auth",
+ "name": "users",
+ "persistence": "p",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": true,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "d",
+ "replica_identity_index": null,
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "partition_by": null,
+ "owner": "supabase_auth_admin",
+ "comment": "Auth: Stores user login data within a secure schema.",
+ "parent_schema": null,
+ "parent_name": null,
+ "columns": [
+ {
+ "name": "instance_id",
+ "position": 1,
+ "data_type": "uuid",
+ "data_type_str": "uuid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "id",
+ "position": 2,
+ "data_type": "uuid",
+ "data_type_str": "uuid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "aud",
+ "position": 3,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "role",
+ "position": 4,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "email",
+ "position": 5,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "encrypted_password",
+ "position": 6,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "confirmed_at",
+ "position": 7,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "invited_at",
+ "position": 8,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "confirmation_token",
+ "position": 9,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "confirmation_sent_at",
+ "position": 10,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "recovery_token",
+ "position": 11,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "recovery_sent_at",
+ "position": 12,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "email_change_token",
+ "position": 13,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "email_change",
+ "position": 14,
+ "data_type": "character varying",
+ "data_type_str": "character varying(255)",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "email_change_sent_at",
+ "position": 15,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "last_sign_in_at",
+ "position": 16,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "raw_app_meta_data",
+ "position": 17,
+ "data_type": "jsonb",
+ "data_type_str": "jsonb",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "raw_user_meta_data",
+ "position": 18,
+ "data_type": "jsonb",
+ "data_type_str": "jsonb",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "is_super_admin",
+ "position": 19,
+ "data_type": "boolean",
+ "data_type_str": "boolean",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "created_at",
+ "position": 20,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "updated_at",
+ "position": 21,
+ "data_type": "timestamp with time zone",
+ "data_type_str": "timestamp with time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ }
+ ],
+ "constraints": [
+ {
+ "name": "users_email_key",
+ "constraint_type": "u",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "email"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_auth_admin",
+ "definition": "UNIQUE (email)",
+ "comment": null
+ },
+ {
+ "name": "users_pkey",
+ "constraint_type": "p",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "id"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_auth_admin",
+ "definition": "PRIMARY KEY (id)",
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "postgres",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_auth_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "dashboard_user",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ }
+ ],
+ "security_labels": []
+ },
+ "table:public.test_tenant": {
+ "schema": "public",
+ "name": "test_tenant",
+ "persistence": "p",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": true,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "d",
+ "replica_identity_index": null,
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "partition_by": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "parent_schema": null,
+ "parent_name": null,
+ "columns": [
+ {
+ "name": "id",
+ "position": 1,
+ "data_type": "integer",
+ "data_type_str": "integer",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": "nextval('public.test_tenant_id_seq'::regclass)",
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "details",
+ "position": 2,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ }
+ ],
+ "constraints": [
+ {
+ "name": "test_tenant_pkey",
+ "constraint_type": "p",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "id"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_admin",
+ "definition": "PRIMARY KEY (id)",
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ }
+ ],
+ "security_labels": []
+ },
+ "table:realtime.messages": {
+ "schema": "realtime",
+ "name": "messages",
+ "persistence": "p",
+ "row_security": true,
+ "force_row_security": false,
+ "has_indexes": true,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "d",
+ "replica_identity_index": null,
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "partition_by": "RANGE (inserted_at)",
+ "owner": "supabase_realtime_admin",
+ "comment": null,
+ "parent_schema": null,
+ "parent_name": null,
+ "columns": [
+ {
+ "name": "topic",
+ "position": 3,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "extension",
+ "position": 4,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "payload",
+ "position": 5,
+ "data_type": "jsonb",
+ "data_type_str": "jsonb",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "event",
+ "position": 6,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "private",
+ "position": 7,
+ "data_type": "boolean",
+ "data_type_str": "boolean",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": "false",
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "updated_at",
+ "position": 8,
+ "data_type": "timestamp without time zone",
+ "data_type_str": "timestamp without time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": "now()",
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "inserted_at",
+ "position": 9,
+ "data_type": "timestamp without time zone",
+ "data_type_str": "timestamp without time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": "now()",
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "id",
+ "position": 10,
+ "data_type": "uuid",
+ "data_type_str": "uuid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": "gen_random_uuid()",
+ "comment": null,
+ "security_labels": []
+ }
+ ],
+ "constraints": [
+ {
+ "name": "messages_pkey",
+ "constraint_type": "p",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "id",
+ "inserted_at"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_realtime_admin",
+ "definition": "PRIMARY KEY (id, inserted_at)",
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "postgres",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ }
+ ],
+ "security_labels": []
+ },
+ "table:realtime.schema_migrations": {
+ "schema": "realtime",
+ "name": "schema_migrations",
+ "persistence": "p",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": true,
+ "has_rules": false,
+ "has_triggers": false,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "d",
+ "replica_identity_index": null,
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "partition_by": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "parent_schema": null,
+ "parent_name": null,
+ "columns": [
+ {
+ "name": "version",
+ "position": 1,
+ "data_type": "bigint",
+ "data_type_str": "bigint",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "inserted_at",
+ "position": 2,
+ "data_type": "timestamp without time zone",
+ "data_type_str": "timestamp(0) without time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ }
+ ],
+ "constraints": [
+ {
+ "name": "schema_migrations_pkey",
+ "constraint_type": "p",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "version"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_admin",
+ "definition": "PRIMARY KEY (version)",
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ }
+ ],
+ "security_labels": []
+ },
+ "table:realtime.subscription": {
+ "schema": "realtime",
+ "name": "subscription",
+ "persistence": "p",
+ "row_security": false,
+ "force_row_security": false,
+ "has_indexes": true,
+ "has_rules": false,
+ "has_triggers": true,
+ "has_subclasses": false,
+ "is_populated": true,
+ "replica_identity": "d",
+ "replica_identity_index": null,
+ "is_partition": false,
+ "options": null,
+ "partition_bound": null,
+ "partition_by": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "parent_schema": null,
+ "parent_name": null,
+ "columns": [
+ {
+ "name": "id",
+ "position": 1,
+ "data_type": "bigint",
+ "data_type_str": "bigint",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": true,
+ "is_identity_always": true,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "subscription_id",
+ "position": 2,
+ "data_type": "uuid",
+ "data_type_str": "uuid",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "entity",
+ "position": 4,
+ "data_type": "regclass",
+ "data_type_str": "regclass",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "filters",
+ "position": 5,
+ "data_type": "realtime.user_defined_filter[]",
+ "data_type_str": "realtime.user_defined_filter[]",
+ "is_custom_type": true,
+ "custom_type_type": "b",
+ "custom_type_category": "A",
+ "custom_type_schema": "realtime",
+ "custom_type_name": "_user_defined_filter",
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": "'{}'::realtime.user_defined_filter[]",
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "claims",
+ "position": 7,
+ "data_type": "jsonb",
+ "data_type_str": "jsonb",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": null,
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "claims_role",
+ "position": 8,
+ "data_type": "regrole",
+ "data_type_str": "regrole",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": true,
+ "collation": null,
+ "default": "realtime.to_regrole((claims ->> 'role'::text))",
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "created_at",
+ "position": 9,
+ "data_type": "timestamp without time zone",
+ "data_type_str": "timestamp without time zone",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": true,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": "timezone('utc'::text, now())",
+ "comment": null,
+ "security_labels": []
+ },
+ {
+ "name": "action_filter",
+ "position": 10,
+ "data_type": "text",
+ "data_type_str": "text",
+ "is_custom_type": false,
+ "custom_type_type": null,
+ "custom_type_category": null,
+ "custom_type_schema": null,
+ "custom_type_name": null,
+ "not_null": false,
+ "is_identity": false,
+ "is_identity_always": false,
+ "is_generated": false,
+ "collation": null,
+ "default": "'*'::text",
+ "comment": null,
+ "security_labels": []
+ }
+ ],
+ "constraints": [
+ {
+ "name": "pk_subscription",
+ "constraint_type": "p",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": true,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "id"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": null,
+ "owner": "supabase_admin",
+ "definition": "PRIMARY KEY (id)",
+ "comment": null
+ },
+ {
+ "name": "subscription_action_filter_check",
+ "constraint_type": "c",
+ "deferrable": false,
+ "initially_deferred": false,
+ "validated": true,
+ "is_local": true,
+ "no_inherit": false,
+ "is_temporal": false,
+ "is_partition_clone": false,
+ "parent_constraint_schema": null,
+ "parent_constraint_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "key_columns": [
+ "action_filter"
+ ],
+ "foreign_key_columns": null,
+ "foreign_key_table": null,
+ "foreign_key_schema": null,
+ "foreign_key_table_is_partition": null,
+ "foreign_key_parent_schema": null,
+ "foreign_key_parent_table": null,
+ "foreign_key_effective_schema": null,
+ "foreign_key_effective_table": null,
+ "on_update": null,
+ "on_delete": null,
+ "match_type": null,
+ "check_expression": "(action_filter = ANY (ARRAY['*'::text, 'INSERT'::text, 'UPDATE'::text, 'DELETE'::text]))",
+ "owner": "supabase_admin",
+ "definition": "CHECK (action_filter = ANY (ARRAY['*'::text, 'INSERT'::text, 'UPDATE'::text, 'DELETE'::text]))",
+ "comment": null
+ }
+ ],
+ "privileges": [
+ {
+ "grantee": "supabase_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "postgres",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "anon",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "authenticated",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "service_role",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "DELETE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "INSERT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "MAINTAIN",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "REFERENCES",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "SELECT",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "TRIGGER",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "TRUNCATE",
+ "grantable": false,
+ "columns": null
+ },
+ {
+ "grantee": "supabase_realtime_admin",
+ "privilege": "UPDATE",
+ "grantable": false,
+ "columns": null
+ }
+ ],
+ "security_labels": []
+ }
+ },
+ "triggers": {
+ "trigger:realtime.subscription.tr_check_filters": {
+ "schema": "realtime",
+ "name": "tr_check_filters",
+ "table_name": "subscription",
+ "table_relkind": "r",
+ "function_schema": "realtime",
+ "function_name": "subscription_check_filters",
+ "trigger_type": 23,
+ "enabled": "O",
+ "is_internal": false,
+ "deferrable": false,
+ "initially_deferred": false,
+ "argument_count": 0,
+ "column_numbers": [],
+ "arguments": [],
+ "when_condition": null,
+ "old_table": null,
+ "new_table": null,
+ "is_partition_clone": false,
+ "parent_trigger_name": null,
+ "parent_table_schema": null,
+ "parent_table_name": null,
+ "is_on_partitioned_table": false,
+ "owner": "supabase_admin",
+ "definition": "CREATE TRIGGER tr_check_filters BEFORE INSERT OR UPDATE ON realtime.subscription FOR EACH ROW EXECUTE FUNCTION realtime.subscription_check_filters()",
+ "comment": null
+ }
+ },
+ "eventTriggers": {
+ "eventTrigger:issue_graphql_placeholder": {
+ "name": "issue_graphql_placeholder",
+ "event": "sql_drop",
+ "function_schema": "extensions",
+ "function_name": "set_graphql_placeholder",
+ "enabled": "O",
+ "tags": [
+ "DROP EXTENSION"
+ ],
+ "owner": "supabase_admin",
+ "comment": null,
+ "security_labels": []
+ },
+ "eventTrigger:issue_pg_cron_access": {
+ "name": "issue_pg_cron_access",
+ "event": "ddl_command_end",
+ "function_schema": "extensions",
+ "function_name": "grant_pg_cron_access",
+ "enabled": "O",
+ "tags": [
+ "CREATE EXTENSION"
+ ],
+ "owner": "supabase_admin",
+ "comment": null,
+ "security_labels": []
+ },
+ "eventTrigger:issue_pg_graphql_access": {
+ "name": "issue_pg_graphql_access",
+ "event": "ddl_command_end",
+ "function_schema": "extensions",
+ "function_name": "grant_pg_graphql_access",
+ "enabled": "O",
+ "tags": [
+ "CREATE FUNCTION"
+ ],
+ "owner": "supabase_admin",
+ "comment": null,
+ "security_labels": []
+ },
+ "eventTrigger:issue_pg_net_access": {
+ "name": "issue_pg_net_access",
+ "event": "ddl_command_end",
+ "function_schema": "extensions",
+ "function_name": "grant_pg_net_access",
+ "enabled": "O",
+ "tags": [
+ "CREATE EXTENSION"
+ ],
+ "owner": "supabase_admin",
+ "comment": null,
+ "security_labels": []
+ },
+ "eventTrigger:pgrst_ddl_watch": {
+ "name": "pgrst_ddl_watch",
+ "event": "ddl_command_end",
+ "function_schema": "extensions",
+ "function_name": "pgrst_ddl_watch",
+ "enabled": "O",
+ "tags": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "security_labels": []
+ },
+ "eventTrigger:pgrst_drop_watch": {
+ "name": "pgrst_drop_watch",
+ "event": "sql_drop",
+ "function_schema": "extensions",
+ "function_name": "pgrst_drop_watch",
+ "enabled": "O",
+ "tags": null,
+ "owner": "supabase_admin",
+ "comment": null,
+ "security_labels": []
+ }
+ },
+ "rules": {},
+ "ranges": {},
+ "views": {},
+ "foreignDataWrappers": {},
+ "servers": {},
+ "userMappings": {},
+ "foreignTables": {},
+ "depends": [
+ {
+ "dependent_stable_id": "acl:procedure:auth.email()::grantee:dashboard_user",
+ "referenced_stable_id": "procedure:auth.email()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.email()::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.email()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:auth.email()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.email()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.email()::grantee:supabase_auth_admin",
+ "referenced_stable_id": "procedure:auth.email()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.email()::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.role()::grantee:dashboard_user",
+ "referenced_stable_id": "procedure:auth.role()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.role()::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.role()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:auth.role()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.role()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.role()::grantee:supabase_auth_admin",
+ "referenced_stable_id": "procedure:auth.role()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.role()::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.uid()::grantee:dashboard_user",
+ "referenced_stable_id": "procedure:auth.uid()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.uid()::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.uid()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:auth.uid()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.uid()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.uid()::grantee:supabase_auth_admin",
+ "referenced_stable_id": "procedure:auth.uid()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:auth.uid()::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_cron_access()::grantee:dashboard_user",
+ "referenced_stable_id": "procedure:extensions.grant_pg_cron_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_cron_access()::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_cron_access()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:extensions.grant_pg_cron_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_cron_access()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_cron_access()::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:extensions.grant_pg_cron_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_cron_access()::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_graphql_access()::grantee:postgres",
+ "referenced_stable_id": "procedure:extensions.grant_pg_graphql_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_graphql_access()::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_graphql_access()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:extensions.grant_pg_graphql_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_graphql_access()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_graphql_access()::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:extensions.grant_pg_graphql_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_graphql_access()::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_net_access()::grantee:dashboard_user",
+ "referenced_stable_id": "procedure:extensions.grant_pg_net_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_net_access()::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_net_access()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:extensions.grant_pg_net_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_net_access()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_net_access()::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:extensions.grant_pg_net_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.grant_pg_net_access()::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_ddl_watch()::grantee:postgres",
+ "referenced_stable_id": "procedure:extensions.pgrst_ddl_watch()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_ddl_watch()::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_ddl_watch()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:extensions.pgrst_ddl_watch()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_ddl_watch()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_ddl_watch()::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:extensions.pgrst_ddl_watch()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_ddl_watch()::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_drop_watch()::grantee:postgres",
+ "referenced_stable_id": "procedure:extensions.pgrst_drop_watch()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_drop_watch()::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_drop_watch()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:extensions.pgrst_drop_watch()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_drop_watch()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_drop_watch()::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:extensions.pgrst_drop_watch()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.pgrst_drop_watch()::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.set_graphql_placeholder()::grantee:postgres",
+ "referenced_stable_id": "procedure:extensions.set_graphql_placeholder()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.set_graphql_placeholder()::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.set_graphql_placeholder()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:extensions.set_graphql_placeholder()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.set_graphql_placeholder()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.set_graphql_placeholder()::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:extensions.set_graphql_placeholder()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:extensions.set_graphql_placeholder()::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:pgbouncer.get_auth(text)::grantee:pgbouncer",
+ "referenced_stable_id": "procedure:pgbouncer.get_auth(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:pgbouncer.get_auth(text)::grantee:pgbouncer",
+ "referenced_stable_id": "role:pgbouncer",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:pgbouncer.get_auth(text)::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:pgbouncer.get_auth(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:pgbouncer.get_auth(text)::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:anon",
+ "referenced_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:authenticated",
+ "referenced_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:postgres",
+ "referenced_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:service_role",
+ "referenced_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.\"cast\"(text,regtype)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:anon",
+ "referenced_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:authenticated",
+ "referenced_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:postgres",
+ "referenced_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:service_role",
+ "referenced_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.apply_rls(jsonb,integer)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:anon",
+ "referenced_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:authenticated",
+ "referenced_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:postgres",
+ "referenced_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:service_role",
+ "referenced_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:anon",
+ "referenced_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:authenticated",
+ "referenced_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:postgres",
+ "referenced_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:service_role",
+ "referenced_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:anon",
+ "referenced_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:authenticated",
+ "referenced_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:postgres",
+ "referenced_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:service_role",
+ "referenced_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:anon",
+ "referenced_stable_id": "procedure:realtime.quote_wal2json(regclass)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:authenticated",
+ "referenced_stable_id": "procedure:realtime.quote_wal2json(regclass)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:postgres",
+ "referenced_stable_id": "procedure:realtime.quote_wal2json(regclass)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:realtime.quote_wal2json(regclass)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:service_role",
+ "referenced_stable_id": "procedure:realtime.quote_wal2json(regclass)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:realtime.quote_wal2json(regclass)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "procedure:realtime.quote_wal2json(regclass)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.quote_wal2json(regclass)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:anon",
+ "referenced_stable_id": "procedure:realtime.subscription_check_filters()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:authenticated",
+ "referenced_stable_id": "procedure:realtime.subscription_check_filters()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:postgres",
+ "referenced_stable_id": "procedure:realtime.subscription_check_filters()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:realtime.subscription_check_filters()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:service_role",
+ "referenced_stable_id": "procedure:realtime.subscription_check_filters()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:realtime.subscription_check_filters()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "procedure:realtime.subscription_check_filters()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.subscription_check_filters()::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:anon",
+ "referenced_stable_id": "procedure:realtime.to_regrole(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:authenticated",
+ "referenced_stable_id": "procedure:realtime.to_regrole(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:postgres",
+ "referenced_stable_id": "procedure:realtime.to_regrole(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:PUBLIC",
+ "referenced_stable_id": "procedure:realtime.to_regrole(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:service_role",
+ "referenced_stable_id": "procedure:realtime.to_regrole(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:supabase_admin",
+ "referenced_stable_id": "procedure:realtime.to_regrole(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "procedure:realtime.to_regrole(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:procedure:realtime.to_regrole(text)::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:anon",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:authenticated",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:dashboard_user",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:postgres",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:service_role",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:supabase_admin",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:auth::grantee:supabase_auth_admin",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:anon",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:authenticated",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:dashboard_user",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:postgres",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:extensions::grantee:service_role",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:anon",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:authenticated",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:postgres",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:service_role",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql_public::grantee:supabase_admin",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:anon",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:authenticated",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:postgres",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:service_role",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:graphql::grantee:supabase_admin",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:anon",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:authenticated",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:pg_database_owner",
+ "referenced_stable_id": "role:pg_database_owner",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:pg_database_owner",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:postgres",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:PUBLIC",
+ "referenced_stable_id": "role:PUBLIC",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:PUBLIC",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:public::grantee:service_role",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:anon",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:authenticated",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:postgres",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:service_role",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:supabase_admin",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:realtime::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:anon",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:authenticated",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:dashboard_user",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:postgres",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:service_role",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:supabase_admin",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:supabase_storage_admin",
+ "referenced_stable_id": "role:supabase_storage_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:storage::grantee:supabase_storage_admin",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:vault::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:vault::grantee:postgres",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:vault::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:vault::grantee:service_role",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:vault::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:schema:vault::grantee:supabase_admin",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:auth.refresh_tokens_id_seq::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:auth.refresh_tokens_id_seq::grantee:dashboard_user",
+ "referenced_stable_id": "sequence:auth.refresh_tokens_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:auth.refresh_tokens_id_seq::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:auth.refresh_tokens_id_seq::grantee:postgres",
+ "referenced_stable_id": "sequence:auth.refresh_tokens_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:auth.refresh_tokens_id_seq::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:auth.refresh_tokens_id_seq::grantee:supabase_auth_admin",
+ "referenced_stable_id": "sequence:auth.refresh_tokens_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:anon",
+ "referenced_stable_id": "sequence:public.test_tenant_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:authenticated",
+ "referenced_stable_id": "sequence:public.test_tenant_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:postgres",
+ "referenced_stable_id": "sequence:public.test_tenant_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:service_role",
+ "referenced_stable_id": "sequence:public.test_tenant_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:public.test_tenant_id_seq::grantee:supabase_admin",
+ "referenced_stable_id": "sequence:public.test_tenant_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:anon",
+ "referenced_stable_id": "sequence:realtime.subscription_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:authenticated",
+ "referenced_stable_id": "sequence:realtime.subscription_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:postgres",
+ "referenced_stable_id": "sequence:realtime.subscription_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:service_role",
+ "referenced_stable_id": "sequence:realtime.subscription_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:supabase_admin",
+ "referenced_stable_id": "sequence:realtime.subscription_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:sequence:realtime.subscription_id_seq::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "sequence:realtime.subscription_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.audit_log_entries::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.audit_log_entries::grantee:dashboard_user",
+ "referenced_stable_id": "table:auth.audit_log_entries",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.audit_log_entries::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.audit_log_entries::grantee:postgres",
+ "referenced_stable_id": "table:auth.audit_log_entries",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.audit_log_entries::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.audit_log_entries::grantee:supabase_auth_admin",
+ "referenced_stable_id": "table:auth.audit_log_entries",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.instances::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.instances::grantee:dashboard_user",
+ "referenced_stable_id": "table:auth.instances",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.instances::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.instances::grantee:postgres",
+ "referenced_stable_id": "table:auth.instances",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.instances::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.instances::grantee:supabase_auth_admin",
+ "referenced_stable_id": "table:auth.instances",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.refresh_tokens::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.refresh_tokens::grantee:dashboard_user",
+ "referenced_stable_id": "table:auth.refresh_tokens",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.refresh_tokens::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.refresh_tokens::grantee:postgres",
+ "referenced_stable_id": "table:auth.refresh_tokens",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.refresh_tokens::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.refresh_tokens::grantee:supabase_auth_admin",
+ "referenced_stable_id": "table:auth.refresh_tokens",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.schema_migrations::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.schema_migrations::grantee:supabase_auth_admin",
+ "referenced_stable_id": "table:auth.schema_migrations",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.users::grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.users::grantee:dashboard_user",
+ "referenced_stable_id": "table:auth.users",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.users::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.users::grantee:postgres",
+ "referenced_stable_id": "table:auth.users",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.users::grantee:supabase_auth_admin",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:auth.users::grantee:supabase_auth_admin",
+ "referenced_stable_id": "table:auth.users",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:anon",
+ "referenced_stable_id": "table:public.test_tenant",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:authenticated",
+ "referenced_stable_id": "table:public.test_tenant",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:postgres",
+ "referenced_stable_id": "table:public.test_tenant",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:service_role",
+ "referenced_stable_id": "table:public.test_tenant",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:public.test_tenant::grantee:supabase_admin",
+ "referenced_stable_id": "table:public.test_tenant",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:anon",
+ "referenced_stable_id": "table:realtime.messages",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:authenticated",
+ "referenced_stable_id": "table:realtime.messages",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:postgres",
+ "referenced_stable_id": "table:realtime.messages",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:service_role",
+ "referenced_stable_id": "table:realtime.messages",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.messages::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "table:realtime.messages",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:anon",
+ "referenced_stable_id": "table:realtime.schema_migrations",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:authenticated",
+ "referenced_stable_id": "table:realtime.schema_migrations",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:postgres",
+ "referenced_stable_id": "table:realtime.schema_migrations",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:service_role",
+ "referenced_stable_id": "table:realtime.schema_migrations",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:supabase_admin",
+ "referenced_stable_id": "table:realtime.schema_migrations",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.schema_migrations::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "table:realtime.schema_migrations",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:anon",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:authenticated",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:postgres",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:service_role",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:supabase_admin",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:supabase_admin",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "acl:table:realtime.subscription::grantee:supabase_realtime_admin",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "column:auth.refresh_tokens.id",
+ "referenced_stable_id": "sequence:auth.refresh_tokens_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "column:public.test_tenant.id",
+ "referenced_stable_id": "sequence:public.test_tenant_id_seq",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "column:realtime.subscription.claims_role",
+ "referenced_stable_id": "column:realtime.subscription.claims",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "column:realtime.subscription.claims_role",
+ "referenced_stable_id": "procedure:realtime.to_regrole(text)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "column:realtime.subscription.filters",
+ "referenced_stable_id": "type:realtime._user_defined_filter",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "column:realtime.user_defined_filter.op",
+ "referenced_stable_id": "type:realtime.equality_op",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "column:vault.secrets.nonce",
+ "referenced_stable_id": "procedure:vault._crypto_aead_det_noncegen()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "comment:extension:\"uuid-ossp\"",
+ "referenced_stable_id": "extension:\"uuid-ossp\"",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:extension:pg_graphql",
+ "referenced_stable_id": "extension:pg_graphql",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:extension:pg_stat_statements",
+ "referenced_stable_id": "extension:pg_stat_statements",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:extension:pgcrypto",
+ "referenced_stable_id": "extension:pgcrypto",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:extension:plpgsql",
+ "referenced_stable_id": "extension:plpgsql",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:extension:supabase_vault",
+ "referenced_stable_id": "extension:supabase_vault",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:language:plpgsql",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:language:sql",
+ "referenced_stable_id": "language:sql",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:procedure:extensions.grant_pg_cron_access()",
+ "referenced_stable_id": "procedure:extensions.grant_pg_cron_access()",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:procedure:extensions.grant_pg_graphql_access()",
+ "referenced_stable_id": "procedure:extensions.grant_pg_graphql_access()",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:procedure:extensions.grant_pg_net_access()",
+ "referenced_stable_id": "procedure:extensions.grant_pg_net_access()",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:procedure:extensions.set_graphql_placeholder()",
+ "referenced_stable_id": "procedure:extensions.set_graphql_placeholder()",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:table:auth.audit_log_entries",
+ "referenced_stable_id": "table:auth.audit_log_entries",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:table:auth.instances",
+ "referenced_stable_id": "table:auth.instances",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:table:auth.refresh_tokens",
+ "referenced_stable_id": "table:auth.refresh_tokens",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:table:auth.schema_migrations",
+ "referenced_stable_id": "table:auth.schema_migrations",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:table:auth.users",
+ "referenced_stable_id": "table:auth.users",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "comment:table:vault.secrets",
+ "referenced_stable_id": "table:vault.secrets",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:auth.audit_log_entries.audit_log_entries_pkey",
+ "referenced_stable_id": "column:auth.audit_log_entries.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:auth.instances.instances_pkey",
+ "referenced_stable_id": "column:auth.instances.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:auth.refresh_tokens.refresh_tokens_pkey",
+ "referenced_stable_id": "column:auth.refresh_tokens.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:auth.schema_migrations.schema_migrations_pkey",
+ "referenced_stable_id": "column:auth.schema_migrations.version",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:auth.users.users_email_key",
+ "referenced_stable_id": "column:auth.users.email",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:auth.users.users_pkey",
+ "referenced_stable_id": "column:auth.users.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:public.test_tenant.test_tenant_pkey",
+ "referenced_stable_id": "column:public.test_tenant.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:realtime.messages.messages_pkey",
+ "referenced_stable_id": "column:realtime.messages.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:realtime.messages.messages_pkey",
+ "referenced_stable_id": "column:realtime.messages.inserted_at",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:realtime.schema_migrations.schema_migrations_pkey",
+ "referenced_stable_id": "column:realtime.schema_migrations.version",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:realtime.subscription.pk_subscription",
+ "referenced_stable_id": "column:realtime.subscription.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:realtime.subscription.subscription_action_filter_check",
+ "referenced_stable_id": "column:realtime.subscription.action_filter",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "constraint:realtime.subscription.subscription_action_filter_check",
+ "referenced_stable_id": "column:realtime.subscription.action_filter",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "constraint:vault.secrets.secrets_pkey",
+ "referenced_stable_id": "column:vault.secrets.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:anon",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:anon",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:authenticated",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:postgres",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:public:grantee:service_role",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:anon",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:anon",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:authenticated",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:authenticated",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:postgres",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:service_role",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:f:schema:storage:grantee:service_role",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:anon",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:anon",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:authenticated",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:postgres",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:public:grantee:service_role",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:anon",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:anon",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:authenticated",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:authenticated",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:postgres",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:service_role",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:r:schema:storage:grantee:service_role",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:anon",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:anon",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:authenticated",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:postgres",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:public:grantee:service_role",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:anon",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:anon",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:authenticated",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:authenticated",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:postgres",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:service_role",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:postgres:S:schema:storage:grantee:service_role",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:extensions:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:extensions:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:extensions:grantee:postgres",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:anon",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:anon",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:authenticated",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:authenticated",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:postgres",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:service_role",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql_public:grantee:service_role",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:anon",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:anon",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:authenticated",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:authenticated",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:postgres",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:service_role",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:graphql:grantee:service_role",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:anon",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:anon",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:authenticated",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:postgres",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:f:schema:public:grantee:service_role",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:extensions:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:extensions:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:extensions:grantee:postgres",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:anon",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:anon",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:authenticated",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:authenticated",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:postgres",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:service_role",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql_public:grantee:service_role",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:anon",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:anon",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:authenticated",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:authenticated",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:postgres",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:service_role",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:graphql:grantee:service_role",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:anon",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:anon",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:authenticated",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:postgres",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:r:schema:public:grantee:service_role",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:extensions:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:extensions:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:extensions:grantee:postgres",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:anon",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:anon",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:authenticated",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:authenticated",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:postgres",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:service_role",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql_public:grantee:service_role",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:anon",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:anon",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:authenticated",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:authenticated",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:postgres",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:service_role",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:graphql:grantee:service_role",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:anon",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:anon",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:anon",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:authenticated",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:authenticated",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:postgres",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:postgres",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:service_role",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_admin:S:schema:public:grantee:service_role",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:f:schema:auth:grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:f:schema:auth:grantee:dashboard_user",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:f:schema:auth:grantee:dashboard_user",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:f:schema:auth:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:f:schema:auth:grantee:postgres",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:f:schema:auth:grantee:postgres",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:r:schema:auth:grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:r:schema:auth:grantee:dashboard_user",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:r:schema:auth:grantee:dashboard_user",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:r:schema:auth:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:r:schema:auth:grantee:postgres",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:r:schema:auth:grantee:postgres",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:S:schema:auth:grantee:dashboard_user",
+ "referenced_stable_id": "role:dashboard_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:S:schema:auth:grantee:dashboard_user",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:S:schema:auth:grantee:dashboard_user",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:S:schema:auth:grantee:postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:S:schema:auth:grantee:postgres",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defacl:supabase_auth_admin:S:schema:auth:grantee:postgres",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:auth.f",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:auth.r",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:auth.S",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:extensions.f",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:extensions.r",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:extensions.S",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:graphql_public.f",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:graphql_public.r",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:graphql_public.S",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:graphql.f",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:graphql.r",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:graphql.S",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:public.f",
+ "referenced_stable_id": "schema:public",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:public.r",
+ "referenced_stable_id": "schema:public",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:public.S",
+ "referenced_stable_id": "schema:public",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:storage.f",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:storage.r",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "defaultAcl:storage.S",
+ "referenced_stable_id": "schema:storage",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:graphql_watch_ddl",
+ "referenced_stable_id": "procedure:graphql.increment_schema_version()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:graphql_watch_ddl",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:graphql_watch_drop",
+ "referenced_stable_id": "procedure:graphql.increment_schema_version()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:graphql_watch_drop",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:issue_graphql_placeholder",
+ "referenced_stable_id": "procedure:extensions.set_graphql_placeholder()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:issue_graphql_placeholder",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:issue_pg_cron_access",
+ "referenced_stable_id": "procedure:extensions.grant_pg_cron_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:issue_pg_cron_access",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:issue_pg_graphql_access",
+ "referenced_stable_id": "procedure:extensions.grant_pg_graphql_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:issue_pg_graphql_access",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:issue_pg_net_access",
+ "referenced_stable_id": "procedure:extensions.grant_pg_net_access()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:issue_pg_net_access",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:pgrst_ddl_watch",
+ "referenced_stable_id": "procedure:extensions.pgrst_ddl_watch()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:pgrst_ddl_watch",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:pgrst_drop_watch",
+ "referenced_stable_id": "procedure:extensions.pgrst_drop_watch()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "eventTrigger:pgrst_drop_watch",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:\"uuid-ossp\"",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:\"uuid-ossp\"",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:pg_graphql",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:pg_graphql",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:pg_stat_statements",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:pg_stat_statements",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:pgcrypto",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:pgcrypto",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:supabase_vault",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "extension:supabase_vault",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.audit_log_entries.audit_log_entries_pkey",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.audit_log_entries.audit_log_entries_pkey",
+ "referenced_stable_id": "table:auth.audit_log_entries",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.audit_log_entries.audit_logs_instance_id_idx",
+ "referenced_stable_id": "column:auth.audit_log_entries.instance_id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:auth.audit_log_entries.audit_logs_instance_id_idx",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.audit_log_entries.audit_logs_instance_id_idx",
+ "referenced_stable_id": "table:auth.audit_log_entries",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.instances.instances_pkey",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.instances.instances_pkey",
+ "referenced_stable_id": "table:auth.instances",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_instance_id_idx",
+ "referenced_stable_id": "column:auth.refresh_tokens.instance_id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_instance_id_idx",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_instance_id_idx",
+ "referenced_stable_id": "table:auth.refresh_tokens",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_instance_id_user_id_idx",
+ "referenced_stable_id": "column:auth.refresh_tokens.instance_id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_instance_id_user_id_idx",
+ "referenced_stable_id": "column:auth.refresh_tokens.user_id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_instance_id_user_id_idx",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_instance_id_user_id_idx",
+ "referenced_stable_id": "table:auth.refresh_tokens",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_pkey",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_pkey",
+ "referenced_stable_id": "table:auth.refresh_tokens",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_token_idx",
+ "referenced_stable_id": "column:auth.refresh_tokens.token",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_token_idx",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.refresh_tokens.refresh_tokens_token_idx",
+ "referenced_stable_id": "table:auth.refresh_tokens",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.schema_migrations.schema_migrations_pkey",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.schema_migrations.schema_migrations_pkey",
+ "referenced_stable_id": "table:auth.schema_migrations",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_email_key",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_email_key",
+ "referenced_stable_id": "table:auth.users",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_instance_id_email_idx",
+ "referenced_stable_id": "column:auth.users.email",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_instance_id_email_idx",
+ "referenced_stable_id": "column:auth.users.instance_id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_instance_id_email_idx",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_instance_id_email_idx",
+ "referenced_stable_id": "table:auth.users",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_instance_id_idx",
+ "referenced_stable_id": "column:auth.users.instance_id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_instance_id_idx",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_instance_id_idx",
+ "referenced_stable_id": "table:auth.users",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_pkey",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:auth.users.users_pkey",
+ "referenced_stable_id": "table:auth.users",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:public.test_tenant.test_tenant_pkey",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:public.test_tenant.test_tenant_pkey",
+ "referenced_stable_id": "table:public.test_tenant",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:realtime.schema_migrations.schema_migrations_pkey",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:realtime.schema_migrations.schema_migrations_pkey",
+ "referenced_stable_id": "table:realtime.schema_migrations",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.ix_realtime_subscription_entity",
+ "referenced_stable_id": "column:realtime.subscription.entity",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.ix_realtime_subscription_entity",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.ix_realtime_subscription_entity",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.pk_subscription",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.pk_subscription",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.subscription_subscription_id_entity_filters_action_filter_key",
+ "referenced_stable_id": "column:realtime.subscription.action_filter",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.subscription_subscription_id_entity_filters_action_filter_key",
+ "referenced_stable_id": "column:realtime.subscription.entity",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.subscription_subscription_id_entity_filters_action_filter_key",
+ "referenced_stable_id": "column:realtime.subscription.filters",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.subscription_subscription_id_entity_filters_action_filter_key",
+ "referenced_stable_id": "column:realtime.subscription.subscription_id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.subscription_subscription_id_entity_filters_action_filter_key",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:realtime.subscription.subscription_subscription_id_entity_filters_action_filter_key",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:vault.secrets.secrets_name_idx",
+ "referenced_stable_id": "column:vault.secrets.name",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "index:vault.secrets.secrets_name_idx",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:vault.secrets.secrets_name_idx",
+ "referenced_stable_id": "table:vault.secrets",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:vault.secrets.secrets_pkey",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "index:vault.secrets.secrets_pkey",
+ "referenced_stable_id": "table:vault.secrets",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "language:plpgsql",
+ "referenced_stable_id": "procedure:pg_catalog.plpgsql_call_handler()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "language:plpgsql",
+ "referenced_stable_id": "procedure:pg_catalog.plpgsql_inline_handler(internal)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "language:plpgsql",
+ "referenced_stable_id": "procedure:pg_catalog.plpgsql_validator(oid)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "language:plpgsql",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:anon->authenticator",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:anon->authenticator",
+ "referenced_stable_id": "role:authenticator",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:anon->postgres",
+ "referenced_stable_id": "role:anon",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:anon->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:authenticated->authenticator",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:authenticated->authenticator",
+ "referenced_stable_id": "role:authenticator",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:authenticated->postgres",
+ "referenced_stable_id": "role:authenticated",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:authenticated->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:authenticator->postgres",
+ "referenced_stable_id": "role:authenticator",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:authenticator->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:authenticator->supabase_storage_admin",
+ "referenced_stable_id": "role:authenticator",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:authenticator->supabase_storage_admin",
+ "referenced_stable_id": "role:supabase_storage_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_create_subscription->postgres",
+ "referenced_stable_id": "role:pg_create_subscription",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_create_subscription->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_monitor->postgres",
+ "referenced_stable_id": "role:pg_monitor",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_monitor->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_monitor->supabase_etl_admin",
+ "referenced_stable_id": "role:pg_monitor",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_monitor->supabase_etl_admin",
+ "referenced_stable_id": "role:supabase_etl_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_monitor->supabase_read_only_user",
+ "referenced_stable_id": "role:pg_monitor",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_monitor->supabase_read_only_user",
+ "referenced_stable_id": "role:supabase_read_only_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_data->postgres",
+ "referenced_stable_id": "role:pg_read_all_data",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_data->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_data->supabase_etl_admin",
+ "referenced_stable_id": "role:pg_read_all_data",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_data->supabase_etl_admin",
+ "referenced_stable_id": "role:supabase_etl_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_data->supabase_read_only_user",
+ "referenced_stable_id": "role:pg_read_all_data",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_data->supabase_read_only_user",
+ "referenced_stable_id": "role:supabase_read_only_user",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_settings->pg_monitor",
+ "referenced_stable_id": "role:pg_monitor",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_settings->pg_monitor",
+ "referenced_stable_id": "role:pg_read_all_settings",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_stats->pg_monitor",
+ "referenced_stable_id": "role:pg_monitor",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_read_all_stats->pg_monitor",
+ "referenced_stable_id": "role:pg_read_all_stats",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_signal_backend->postgres",
+ "referenced_stable_id": "role:pg_signal_backend",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_signal_backend->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_stat_scan_tables->pg_monitor",
+ "referenced_stable_id": "role:pg_monitor",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:pg_stat_scan_tables->pg_monitor",
+ "referenced_stable_id": "role:pg_stat_scan_tables",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:service_role->authenticator",
+ "referenced_stable_id": "role:authenticator",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:service_role->authenticator",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:service_role->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:service_role->postgres",
+ "referenced_stable_id": "role:service_role",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:supabase_realtime_admin->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:supabase_realtime_admin->postgres",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:supabase_superuser->postgres",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:supabase_superuser->postgres",
+ "referenced_stable_id": "role:supabase_superuser",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:supabase_superuser->supabase_etl_admin",
+ "referenced_stable_id": "role:supabase_etl_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "membership:supabase_superuser->supabase_etl_admin",
+ "referenced_stable_id": "role:supabase_superuser",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:auth.email()",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:auth.email()",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:auth.role()",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:auth.role()",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:auth.uid()",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:auth.uid()",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.armor(bytea,text[],text[])",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.armor(bytea,text[],text[])",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.armor(bytea)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.armor(bytea)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.crypt(text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.crypt(text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.dearmor(text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.dearmor(text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.decrypt_iv(bytea,bytea,bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.decrypt_iv(bytea,bytea,bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.decrypt(bytea,bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.decrypt(bytea,bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.digest(bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.digest(bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.digest(text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.digest(text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.encrypt_iv(bytea,bytea,bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.encrypt_iv(bytea,bytea,bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.encrypt(bytea,bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.encrypt(bytea,bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.gen_random_bytes(integer)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.gen_random_bytes(integer)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.gen_random_uuid()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.gen_random_uuid()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.gen_salt(text,integer)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.gen_salt(text,integer)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.gen_salt(text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.gen_salt(text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.grant_pg_cron_access()",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.grant_pg_cron_access()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.grant_pg_cron_access()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.grant_pg_graphql_access()",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.grant_pg_graphql_access()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.grant_pg_graphql_access()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.grant_pg_net_access()",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.grant_pg_net_access()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.grant_pg_net_access()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.hmac(bytea,bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.hmac(bytea,bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.hmac(text,text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.hmac(text,text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pg_stat_statements_info()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pg_stat_statements_info()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pg_stat_statements_reset(oid,oid,bigint,boolean)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pg_stat_statements_reset(oid,oid,bigint,boolean)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pg_stat_statements(boolean)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pg_stat_statements(boolean)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_armor_headers(text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_armor_headers(text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_key_id(bytea)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_key_id(bytea)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt_bytea(bytea,bytea,text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt_bytea(bytea,bytea,text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt_bytea(bytea,bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt_bytea(bytea,bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt_bytea(bytea,bytea)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt_bytea(bytea,bytea)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt(bytea,bytea,text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt(bytea,bytea,text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt(bytea,bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt(bytea,bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt(bytea,bytea)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_decrypt(bytea,bytea)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_encrypt_bytea(bytea,bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_encrypt_bytea(bytea,bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_encrypt_bytea(bytea,bytea)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_encrypt_bytea(bytea,bytea)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_encrypt(text,bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_encrypt(text,bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_encrypt(text,bytea)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_pub_encrypt(text,bytea)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_decrypt_bytea(bytea,text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_decrypt_bytea(bytea,text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_decrypt_bytea(bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_decrypt_bytea(bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_decrypt(bytea,text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_decrypt(bytea,text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_decrypt(bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_decrypt(bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_encrypt_bytea(bytea,text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_encrypt_bytea(bytea,text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_encrypt_bytea(bytea,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_encrypt_bytea(bytea,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_encrypt(text,text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_encrypt(text,text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_encrypt(text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgp_sym_encrypt(text,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgrst_ddl_watch()",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgrst_ddl_watch()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgrst_ddl_watch()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgrst_drop_watch()",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgrst_drop_watch()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.pgrst_drop_watch()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.set_graphql_placeholder()",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.set_graphql_placeholder()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.set_graphql_placeholder()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v1()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v1()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v1mc()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v1mc()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v3(uuid,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v3(uuid,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v4()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v4()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v5(uuid,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_generate_v5(uuid,text)",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_nil()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_nil()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_ns_dns()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_ns_dns()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_ns_oid()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_ns_oid()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_ns_url()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_ns_url()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_ns_x500()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:extensions.uuid_ns_x500()",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql_public.graphql(text,text,jsonb,jsonb)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql_public.graphql(text,text,jsonb,jsonb)",
+ "referenced_stable_id": "schema:graphql_public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql._internal_resolve(text,jsonb,text,jsonb)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql._internal_resolve(text,jsonb,text,jsonb)",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.comment_directive(text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.comment_directive(text)",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.exception(text)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.exception(text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.exception(text)",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.get_schema_version()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.get_schema_version()",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.increment_schema_version()",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.increment_schema_version()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.increment_schema_version()",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.resolve(text,jsonb,text,jsonb)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.resolve(text,jsonb,text,jsonb)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:graphql.resolve(text,jsonb,text,jsonb)",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:pgbouncer.get_auth(text)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:pgbouncer.get_auth(text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:pgbouncer.get_auth(text)",
+ "referenced_stable_id": "schema:pgbouncer",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.\"cast\"(text,regtype)",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.apply_rls(jsonb,integer)",
+ "referenced_stable_id": "type:realtime.wal_rls",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.broadcast_changes(text,text,text,text,text,record,record,text)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.broadcast_changes(text,text,text,text,text,record,record,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.broadcast_changes(text,text,text,text,text,record,record,text)",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.build_prepared_statement_sql(text,regclass,realtime.wal_column[])",
+ "referenced_stable_id": "type:realtime._wal_column",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.check_equality_op(realtime.equality_op,regtype,text,text)",
+ "referenced_stable_id": "type:realtime.equality_op",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "referenced_stable_id": "type:realtime._user_defined_filter",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.is_visible_through_filters(realtime.wal_column[],realtime.user_defined_filter[])",
+ "referenced_stable_id": "type:realtime._wal_column",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.list_changes(name,name,integer,integer)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.list_changes(name,name,integer,integer)",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.quote_wal2json(regclass)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.quote_wal2json(regclass)",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.send(jsonb,text,text,boolean)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.send(jsonb,text,text,boolean)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.send(jsonb,text,text,boolean)",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.subscription_check_filters()",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.subscription_check_filters()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.subscription_check_filters()",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.to_regrole(text)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.to_regrole(text)",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.topic()",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:realtime.topic()",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault._crypto_aead_det_decrypt(bytea,bytea,bigint,bytea,bytea)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault._crypto_aead_det_decrypt(bytea,bytea,bigint,bytea,bytea)",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault._crypto_aead_det_encrypt(bytea,bytea,bigint,bytea,bytea)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault._crypto_aead_det_encrypt(bytea,bytea,bigint,bytea,bytea)",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault._crypto_aead_det_noncegen()",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault._crypto_aead_det_noncegen()",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault.create_secret(text,text,text,uuid)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault.create_secret(text,text,text,uuid)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault.create_secret(text,text,text,uuid)",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault.update_secret(uuid,text,text,text,uuid)",
+ "referenced_stable_id": "language:plpgsql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault.update_secret(uuid,text,text,text,uuid)",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "procedure:vault.update_secret(uuid,text,text,text,uuid)",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "publication:supabase_realtime",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "publication:supabase_realtime",
+ "referenced_stable_id": "table:public.test_tenant",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "publication:supabase_realtime",
+ "referenced_stable_id": "table:public.test_tenant",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "rule:extensions.pg_stat_statements_info.\"_RETURN\"",
+ "referenced_stable_id": "procedure:extensions.pg_stat_statements_info()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:extensions.pg_stat_statements.\"_RETURN\"",
+ "referenced_stable_id": "procedure:extensions.pg_stat_statements(boolean)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:vault.decrypted_secrets.\"_RETURN\"",
+ "referenced_stable_id": "column:vault.secrets.created_at",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:vault.decrypted_secrets.\"_RETURN\"",
+ "referenced_stable_id": "column:vault.secrets.description",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:vault.decrypted_secrets.\"_RETURN\"",
+ "referenced_stable_id": "column:vault.secrets.id",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:vault.decrypted_secrets.\"_RETURN\"",
+ "referenced_stable_id": "column:vault.secrets.key_id",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:vault.decrypted_secrets.\"_RETURN\"",
+ "referenced_stable_id": "column:vault.secrets.name",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:vault.decrypted_secrets.\"_RETURN\"",
+ "referenced_stable_id": "column:vault.secrets.nonce",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:vault.decrypted_secrets.\"_RETURN\"",
+ "referenced_stable_id": "column:vault.secrets.secret",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:vault.decrypted_secrets.\"_RETURN\"",
+ "referenced_stable_id": "column:vault.secrets.updated_at",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "rule:vault.decrypted_secrets.\"_RETURN\"",
+ "referenced_stable_id": "procedure:vault._crypto_aead_det_decrypt(bytea,bytea,bigint,bytea,bytea)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "schema:auth",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "schema:extensions",
+ "referenced_stable_id": "role:postgres",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "schema:graphql",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "schema:graphql_public",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "schema:pgbouncer",
+ "referenced_stable_id": "role:pgbouncer",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "schema:public",
+ "referenced_stable_id": "role:pg_database_owner",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "schema:realtime",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "schema:storage",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "schema:vault",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "sequence:auth.refresh_tokens_id_seq",
+ "referenced_stable_id": "column:auth.refresh_tokens.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "sequence:auth.refresh_tokens_id_seq",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "sequence:auth.refresh_tokens_id_seq",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "sequence:graphql.seq_schema_version",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "sequence:graphql.seq_schema_version",
+ "referenced_stable_id": "schema:graphql",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "sequence:public.test_tenant_id_seq",
+ "referenced_stable_id": "column:public.test_tenant.id",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "sequence:public.test_tenant_id_seq",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "sequence:public.test_tenant_id_seq",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "sequence:realtime.subscription_id_seq",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "sequence:realtime.subscription_id_seq",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.audit_log_entries",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.audit_log_entries",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.instances",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.instances",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.refresh_tokens",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.refresh_tokens",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.schema_migrations",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.schema_migrations",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.users",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:auth.users",
+ "referenced_stable_id": "schema:auth",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:public.test_tenant",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:public.test_tenant",
+ "referenced_stable_id": "schema:public",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:realtime.messages",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:realtime.messages",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:realtime.schema_migrations",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:realtime.schema_migrations",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:realtime.subscription",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:realtime.subscription",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:vault.secrets",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "table:vault.secrets",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "trigger:realtime.subscription.tr_check_filters",
+ "referenced_stable_id": "procedure:realtime.subscription_check_filters()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "trigger:realtime.subscription.tr_check_filters",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "trigger:realtime.subscription.tr_check_filters",
+ "referenced_stable_id": "table:realtime.subscription",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "type:auth._audit_log_entries",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:auth._instances",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:auth._refresh_tokens",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:auth._schema_migrations",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:auth._users",
+ "referenced_stable_id": "role:supabase_auth_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:extensions._pg_stat_statements",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:extensions._pg_stat_statements_info",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:public._test_tenant",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime._action",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime._equality_op",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime._messages",
+ "referenced_stable_id": "role:supabase_realtime_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime._schema_migrations",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime._subscription",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime._user_defined_filter",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime._wal_column",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime._wal_rls",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.action",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.action",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.equality_op",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.equality_op",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.user_defined_filter",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.user_defined_filter",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.user_defined_filter",
+ "referenced_stable_id": "type:realtime.equality_op",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.wal_column",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.wal_column",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.wal_rls",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:realtime.wal_rls",
+ "referenced_stable_id": "schema:realtime",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:vault._decrypted_secrets",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "type:vault._secrets",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "unknown:pg_class.16851",
+ "referenced_stable_id": "column:realtime.messages.extension",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "unknown:pg_class.16851",
+ "referenced_stable_id": "column:realtime.messages.inserted_at",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "unknown:pg_class.16851",
+ "referenced_stable_id": "column:realtime.messages.private",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "unknown:pg_class.16851",
+ "referenced_stable_id": "column:realtime.messages.topic",
+ "deptype": "a"
+ },
+ {
+ "dependent_stable_id": "view:extensions.pg_stat_statements",
+ "referenced_stable_id": "procedure:extensions.pg_stat_statements(boolean)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:extensions.pg_stat_statements",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:extensions.pg_stat_statements",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:extensions.pg_stat_statements_info",
+ "referenced_stable_id": "procedure:extensions.pg_stat_statements_info()",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:extensions.pg_stat_statements_info",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:extensions.pg_stat_statements_info",
+ "referenced_stable_id": "schema:extensions",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "column:vault.secrets.created_at",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "column:vault.secrets.description",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "column:vault.secrets.id",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "column:vault.secrets.key_id",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "column:vault.secrets.name",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "column:vault.secrets.nonce",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "column:vault.secrets.secret",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "column:vault.secrets.updated_at",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "procedure:vault._crypto_aead_det_decrypt(bytea,bytea,bigint,bytea,bytea)",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "role:supabase_admin",
+ "deptype": "n"
+ },
+ {
+ "dependent_stable_id": "view:vault.decrypted_secrets",
+ "referenced_stable_id": "schema:vault",
+ "deptype": "n"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/realtime_web/dashboard/tenant_info_test.exs b/test/realtime_web/dashboard/tenant_info_test.exs
index 8b4fddca7..f5d533254 100644
--- a/test/realtime_web/dashboard/tenant_info_test.exs
+++ b/test/realtime_web/dashboard/tenant_info_test.exs
@@ -1,7 +1,6 @@
defmodule RealtimeWeb.Dashboard.TenantInfoTest do
use RealtimeWeb.ConnCase
import Phoenix.LiveViewTest
- import Generators
setup do
Application.put_env(:realtime, :dashboard_auth, :basic_auth)
@@ -12,7 +11,7 @@ defmodule RealtimeWeb.Dashboard.TenantInfoTest do
Application.delete_env(:realtime, :dashboard_credentials)
end)
- tenant = tenant_fixture()
+ tenant = Containers.checkout_tenant(run_migrations: true)
conn = using_basic_auth(build_conn(), "user", "pass")
%{tenant: tenant, conn: conn}
diff --git a/test/realtime_web/dashboard/tenant_migrations_test.exs b/test/realtime_web/dashboard/tenant_migrations_test.exs
new file mode 100644
index 000000000..b14738d03
--- /dev/null
+++ b/test/realtime_web/dashboard/tenant_migrations_test.exs
@@ -0,0 +1,73 @@
+defmodule RealtimeWeb.Dashboard.TenantMigrationsTest do
+ use RealtimeWeb.ConnCase, async: false
+ import Phoenix.LiveViewTest
+
+ setup do
+ Application.put_env(:realtime, :dashboard_auth, :basic_auth)
+ Application.put_env(:realtime, :dashboard_credentials, {"user", "pass"})
+
+ on_exit(fn ->
+ Application.delete_env(:realtime, :dashboard_auth)
+ Application.delete_env(:realtime, :dashboard_credentials)
+ end)
+
+ tenant = Containers.checkout_tenant(run_migrations: true)
+ conn = using_basic_auth(build_conn(), "user", "pass")
+
+ %{tenant: tenant, conn: conn}
+ end
+
+ test "renders lookup form", %{conn: conn} do
+ {:ok, view, _html} = live(conn, "/admin/dashboard/tenant_migrations")
+
+ assert has_element?(view, "h5.card-title", "Tenant Migrations")
+ assert has_element?(view, "input[name=external_id]")
+ assert has_element?(view, "button[type=submit]", "Lookup")
+ end
+
+ test "shows schema_migrations for valid external_id via URL param", %{conn: conn, tenant: tenant} do
+ {:ok, view, _html} = live(conn, "/admin/dashboard/tenant_migrations?external_id=#{tenant.external_id}")
+
+ assert has_element?(view, "h6", "realtime.schema_migrations")
+ assert has_element?(view, "th", "version")
+ assert has_element?(view, "th", "inserted_at")
+ end
+
+ test "shows schema_migrations for valid external_id via form submit", %{conn: conn, tenant: tenant} do
+ {:ok, view, _html} = live(conn, "/admin/dashboard/tenant_migrations")
+
+ view
+ |> element("form[phx-submit=lookup]")
+ |> render_submit(%{external_id: tenant.external_id})
+
+ assert has_element?(view, "h6", "realtime.schema_migrations")
+ assert has_element?(view, "th", "version")
+ end
+
+ test "shows error for unknown external_id via URL param", %{conn: conn} do
+ {:ok, view, _html} = live(conn, "/admin/dashboard/tenant_migrations?external_id=nonexistent")
+
+ assert has_element?(view, "p.text-danger", "Tenant not found")
+ end
+
+ test "shows error for unknown external_id via form submit", %{conn: conn} do
+ {:ok, view, _html} = live(conn, "/admin/dashboard/tenant_migrations")
+
+ view
+ |> element("form[phx-submit=lookup]")
+ |> render_submit(%{external_id: "nonexistent"})
+
+ assert has_element?(view, "p.text-danger", "Tenant not found")
+ end
+
+ test "renders pg-delta section header when tenant is found", %{conn: conn, tenant: tenant} do
+ {:ok, view, _html} = live(conn, "/admin/dashboard/tenant_migrations?external_id=#{tenant.external_id}")
+
+ assert has_element?(view, "h6", "pg-delta plan vs baseline")
+ end
+
+ defp using_basic_auth(conn, username, password) do
+ header_content = "Basic " <> Base.encode64("#{username}:#{password}")
+ put_req_header(conn, "authorization", header_content)
+ end
+end