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)

+
+
+ + + + + + + + <%= for {[version, inserted_at], idx} <- Enum.with_index(@rows) do %> + + + + + <% end %> + +
+ version + + inserted_at +
+ <%= version %> + + <%= inserted_at %> +
+ + """ + end + + defp pg_delta_plan(nil) do + assigns = %{} + ~H"" + end + + defp pg_delta_plan({:error, msg}) do + assigns = %{msg: msg} + + ~H""" +
+ Error: +
<%= @msg %>
+
+ """ + 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. +
+
+ +
<%= @sql %>
+
+
+ +
+ """ + 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