From 9f5df10bd09091b869ea1d8d2d464035be68084a Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Wed, 13 May 2026 16:33:44 -0400 Subject: [PATCH 1/9] feat(dashboard): tenant migrations page - list all applied migrations - output plan to fix bad state using pg-delta --- Dockerfile | 22 + .../realtime.export_tenant_db_baseline.ex | 74 + .../dashboard/tenant_migrations.ex | 302 + lib/realtime_web/router.ex | 3 +- mise.lock | 4 + mise.toml | 1 + priv/repo/tenant_db_baseline.json | 17332 ++++++++++++++++ 7 files changed, 17737 insertions(+), 1 deletion(-) create mode 100644 lib/mix/tasks/realtime.export_tenant_db_baseline.ex create mode 100644 lib/realtime_web/dashboard/tenant_migrations.ex create mode 100644 priv/repo/tenant_db_baseline.json diff --git a/Dockerfile b/Dockerfile index a69e46d36..9d57916b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,26 @@ 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 + +RUN set -eux; \ + apt-get update -y; \ + apt-get install -y --no-install-recommends curl ca-certificates unzip; \ + curl -fsSL https://bun.sh/install | bash -s "bun-v1.3.14"; \ + 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; \ + rm -rf /build /root/.bun /var/lib/apt/lists/* FROM ${BUILDER_IMAGE} AS builder @@ -78,6 +98,8 @@ 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/*_* +COPY --from=pgdelta-builder /tmp/pgdelta /usr/local/bin/pgdelta + # Set the locale RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen 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..5109d1866 --- /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 the `pgdelta` binary 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 binary 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_migrations.ex b/lib/realtime_web/dashboard/tenant_migrations.ex new file mode 100644 index 000000000..70fbc7a3d --- /dev/null +++ b/lib/realtime_web/dashboard/tenant_migrations.ex @@ -0,0 +1,302 @@ +defmodule RealtimeWeb.Dashboard.TenantMigrations do + @moduledoc """ + Live Dashboard page to inspect tenant migrations state. + + Requires `pgdelta` binary 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 + alias Realtime.Tenants.Connect + + @pg_delta_filter ~s({"*/schema": "realtime"}) + @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, db_conn} <- Connect.lookup_or_start_connection(tenant.external_id), + {:ok, settings} <- Database.from_tenant(tenant, @application_name, :stop) 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 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 binary not found on PATH") + {:error, "pgdelta binary 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 +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..ffa826166 --- /dev/null +++ b/priv/repo/tenant_db_baseline.json @@ -0,0 +1,17332 @@ +{ + "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.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_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.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_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_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.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_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: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_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: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": [ + 8, + 7 + ], + "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": [ + 7, + 1 + ], + "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.messages_2026_05_12.messages_2026_05_12_pkey": { + "schema": "realtime", + "table_name": "messages_2026_05_12", + "name": "messages_2026_05_12_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": [ + 8, + 7 + ], + "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": true, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_pkey", + "definition": "CREATE UNIQUE INDEX messages_2026_05_12_pkey ON realtime.messages_2026_05_12 USING btree (id, inserted_at)", + "comment": null, + "owner": "supabase_admin" + }, + "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx": { + "schema": "realtime", + "table_name": "messages_2026_05_12", + "name": "messages_2026_05_12_inserted_at_topic_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": [ + 7, + 1 + ], + "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": "r", + "is_owned_by_constraint": false, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_inserted_at_topic_index", + "definition": "CREATE INDEX messages_2026_05_12_inserted_at_topic_idx ON realtime.messages_2026_05_12 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", + "comment": null, + "owner": "supabase_admin" + }, + "index:realtime.messages_2026_05_13.messages_2026_05_13_pkey": { + "schema": "realtime", + "table_name": "messages_2026_05_13", + "name": "messages_2026_05_13_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": [ + 8, + 7 + ], + "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": true, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_pkey", + "definition": "CREATE UNIQUE INDEX messages_2026_05_13_pkey ON realtime.messages_2026_05_13 USING btree (id, inserted_at)", + "comment": null, + "owner": "supabase_admin" + }, + "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx": { + "schema": "realtime", + "table_name": "messages_2026_05_13", + "name": "messages_2026_05_13_inserted_at_topic_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": [ + 7, + 1 + ], + "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": "r", + "is_owned_by_constraint": false, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_inserted_at_topic_index", + "definition": "CREATE INDEX messages_2026_05_13_inserted_at_topic_idx ON realtime.messages_2026_05_13 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", + "comment": null, + "owner": "supabase_admin" + }, + "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx": { + "schema": "realtime", + "table_name": "messages_2026_05_14", + "name": "messages_2026_05_14_inserted_at_topic_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": [ + 7, + 1 + ], + "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": "r", + "is_owned_by_constraint": false, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_inserted_at_topic_index", + "definition": "CREATE INDEX messages_2026_05_14_inserted_at_topic_idx ON realtime.messages_2026_05_14 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", + "comment": null, + "owner": "supabase_admin" + }, + "index:realtime.messages_2026_05_14.messages_2026_05_14_pkey": { + "schema": "realtime", + "table_name": "messages_2026_05_14", + "name": "messages_2026_05_14_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": [ + 8, + 7 + ], + "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": true, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_pkey", + "definition": "CREATE UNIQUE INDEX messages_2026_05_14_pkey ON realtime.messages_2026_05_14 USING btree (id, inserted_at)", + "comment": null, + "owner": "supabase_admin" + }, + "index:realtime.messages_2026_05_15.messages_2026_05_15_pkey": { + "schema": "realtime", + "table_name": "messages_2026_05_15", + "name": "messages_2026_05_15_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": [ + 8, + 7 + ], + "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": true, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_pkey", + "definition": "CREATE UNIQUE INDEX messages_2026_05_15_pkey ON realtime.messages_2026_05_15 USING btree (id, inserted_at)", + "comment": null, + "owner": "supabase_admin" + }, + "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx": { + "schema": "realtime", + "table_name": "messages_2026_05_15", + "name": "messages_2026_05_15_inserted_at_topic_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": [ + 7, + 1 + ], + "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": "r", + "is_owned_by_constraint": false, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_inserted_at_topic_index", + "definition": "CREATE INDEX messages_2026_05_15_inserted_at_topic_idx ON realtime.messages_2026_05_15 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", + "comment": null, + "owner": "supabase_admin" + }, + "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx": { + "schema": "realtime", + "table_name": "messages_2026_05_16", + "name": "messages_2026_05_16_inserted_at_topic_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": [ + 7, + 1 + ], + "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": "r", + "is_owned_by_constraint": false, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_inserted_at_topic_index", + "definition": "CREATE INDEX messages_2026_05_16_inserted_at_topic_idx ON realtime.messages_2026_05_16 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", + "comment": null, + "owner": "supabase_admin" + }, + "index:realtime.messages_2026_05_16.messages_2026_05_16_pkey": { + "schema": "realtime", + "table_name": "messages_2026_05_16", + "name": "messages_2026_05_16_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": [ + 8, + 7 + ], + "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": true, + "is_partitioned_index": false, + "is_index_partition": true, + "parent_index_name": "realtime.messages_pkey", + "definition": "CREATE UNIQUE INDEX messages_2026_05_16_pkey ON realtime.messages_2026_05_16 USING btree (id, inserted_at)", + "comment": null, + "owner": "supabase_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.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.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.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": [ + 12, + 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": [] + }, + "publication:supabase_realtime_messages_publication": { + "name": "supabase_realtime_messages_publication", + "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": "realtime", + "name": "messages", + "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": true, + "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": 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": true, + "is_identity": false, + "is_identity_always": false, + "is_generated": false, + "collation": null, + "default": null, + "comment": null, + "security_labels": [] + }, + { + "name": "extension", + "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": 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": "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": 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, + "security_labels": [] + }, + { + "name": "private", + "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": "false", + "comment": null, + "security_labels": [] + }, + { + "name": "updated_at", + "position": 6, + "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": 7, + "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": 8, + "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.messages_2026_05_12": { + "schema": "realtime", + "name": "messages_2026_05_12", + "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": true, + "options": null, + "partition_bound": "FOR VALUES FROM ('2026-05-12 00:00:00') TO ('2026-05-13 00:00:00')", + "partition_by": null, + "owner": "supabase_admin", + "comment": null, + "parent_schema": "realtime", + "parent_name": "messages", + "columns": [ + { + "name": "topic", + "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": true, + "is_identity": false, + "is_identity_always": false, + "is_generated": false, + "collation": null, + "default": null, + "comment": null, + "security_labels": [] + }, + { + "name": "extension", + "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": 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": "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": 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, + "security_labels": [] + }, + { + "name": "private", + "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": "false", + "comment": null, + "security_labels": [] + }, + { + "name": "updated_at", + "position": 6, + "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": 7, + "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": 8, + "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_2026_05_12_pkey", + "constraint_type": "p", + "deferrable": false, + "initially_deferred": false, + "validated": true, + "is_local": false, + "no_inherit": false, + "is_temporal": false, + "is_partition_clone": true, + "parent_constraint_schema": "realtime", + "parent_constraint_name": "messages_pkey", + "parent_table_schema": "realtime", + "parent_table_name": "messages", + "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_admin", + "definition": "PRIMARY KEY (id, inserted_at)", + "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 + } + ], + "security_labels": [] + }, + "table:realtime.messages_2026_05_13": { + "schema": "realtime", + "name": "messages_2026_05_13", + "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": true, + "options": null, + "partition_bound": "FOR VALUES FROM ('2026-05-13 00:00:00') TO ('2026-05-14 00:00:00')", + "partition_by": null, + "owner": "supabase_admin", + "comment": null, + "parent_schema": "realtime", + "parent_name": "messages", + "columns": [ + { + "name": "topic", + "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": true, + "is_identity": false, + "is_identity_always": false, + "is_generated": false, + "collation": null, + "default": null, + "comment": null, + "security_labels": [] + }, + { + "name": "extension", + "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": 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": "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": 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, + "security_labels": [] + }, + { + "name": "private", + "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": "false", + "comment": null, + "security_labels": [] + }, + { + "name": "updated_at", + "position": 6, + "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": 7, + "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": 8, + "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_2026_05_13_pkey", + "constraint_type": "p", + "deferrable": false, + "initially_deferred": false, + "validated": true, + "is_local": false, + "no_inherit": false, + "is_temporal": false, + "is_partition_clone": true, + "parent_constraint_schema": "realtime", + "parent_constraint_name": "messages_pkey", + "parent_table_schema": "realtime", + "parent_table_name": "messages", + "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_admin", + "definition": "PRIMARY KEY (id, inserted_at)", + "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 + } + ], + "security_labels": [] + }, + "table:realtime.messages_2026_05_14": { + "schema": "realtime", + "name": "messages_2026_05_14", + "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": true, + "options": null, + "partition_bound": "FOR VALUES FROM ('2026-05-14 00:00:00') TO ('2026-05-15 00:00:00')", + "partition_by": null, + "owner": "supabase_admin", + "comment": null, + "parent_schema": "realtime", + "parent_name": "messages", + "columns": [ + { + "name": "topic", + "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": true, + "is_identity": false, + "is_identity_always": false, + "is_generated": false, + "collation": null, + "default": null, + "comment": null, + "security_labels": [] + }, + { + "name": "extension", + "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": 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": "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": 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, + "security_labels": [] + }, + { + "name": "private", + "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": "false", + "comment": null, + "security_labels": [] + }, + { + "name": "updated_at", + "position": 6, + "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": 7, + "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": 8, + "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_2026_05_14_pkey", + "constraint_type": "p", + "deferrable": false, + "initially_deferred": false, + "validated": true, + "is_local": false, + "no_inherit": false, + "is_temporal": false, + "is_partition_clone": true, + "parent_constraint_schema": "realtime", + "parent_constraint_name": "messages_pkey", + "parent_table_schema": "realtime", + "parent_table_name": "messages", + "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_admin", + "definition": "PRIMARY KEY (id, inserted_at)", + "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 + } + ], + "security_labels": [] + }, + "table:realtime.messages_2026_05_15": { + "schema": "realtime", + "name": "messages_2026_05_15", + "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": true, + "options": null, + "partition_bound": "FOR VALUES FROM ('2026-05-15 00:00:00') TO ('2026-05-16 00:00:00')", + "partition_by": null, + "owner": "supabase_admin", + "comment": null, + "parent_schema": "realtime", + "parent_name": "messages", + "columns": [ + { + "name": "topic", + "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": true, + "is_identity": false, + "is_identity_always": false, + "is_generated": false, + "collation": null, + "default": null, + "comment": null, + "security_labels": [] + }, + { + "name": "extension", + "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": 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": "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": 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, + "security_labels": [] + }, + { + "name": "private", + "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": "false", + "comment": null, + "security_labels": [] + }, + { + "name": "updated_at", + "position": 6, + "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": 7, + "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": 8, + "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_2026_05_15_pkey", + "constraint_type": "p", + "deferrable": false, + "initially_deferred": false, + "validated": true, + "is_local": false, + "no_inherit": false, + "is_temporal": false, + "is_partition_clone": true, + "parent_constraint_schema": "realtime", + "parent_constraint_name": "messages_pkey", + "parent_table_schema": "realtime", + "parent_table_name": "messages", + "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_admin", + "definition": "PRIMARY KEY (id, inserted_at)", + "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 + } + ], + "security_labels": [] + }, + "table:realtime.messages_2026_05_16": { + "schema": "realtime", + "name": "messages_2026_05_16", + "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": true, + "options": null, + "partition_bound": "FOR VALUES FROM ('2026-05-16 00:00:00') TO ('2026-05-17 00:00:00')", + "partition_by": null, + "owner": "supabase_admin", + "comment": null, + "parent_schema": "realtime", + "parent_name": "messages", + "columns": [ + { + "name": "topic", + "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": true, + "is_identity": false, + "is_identity_always": false, + "is_generated": false, + "collation": null, + "default": null, + "comment": null, + "security_labels": [] + }, + { + "name": "extension", + "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": 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": "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": 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, + "security_labels": [] + }, + { + "name": "private", + "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": "false", + "comment": null, + "security_labels": [] + }, + { + "name": "updated_at", + "position": 6, + "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": 7, + "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": 8, + "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_2026_05_16_pkey", + "constraint_type": "p", + "deferrable": false, + "initially_deferred": false, + "validated": true, + "is_local": false, + "no_inherit": false, + "is_temporal": false, + "is_partition_clone": true, + "parent_constraint_schema": "realtime", + "parent_constraint_name": "messages_pkey", + "parent_table_schema": "realtime", + "parent_table_name": "messages", + "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_admin", + "definition": "PRIMARY KEY (id, inserted_at)", + "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 + } + ], + "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": "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": [] + }, + { + "name": "subscription_id", + "position": 12, + "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": [] + } + ], + "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_2026_05_12.messages_2026_05_12_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_12.id", + "deptype": "a" + }, + { + "dependent_stable_id": "constraint:realtime.messages_2026_05_12.messages_2026_05_12_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_12.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "constraint:realtime.messages_2026_05_13.messages_2026_05_13_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_13.id", + "deptype": "a" + }, + { + "dependent_stable_id": "constraint:realtime.messages_2026_05_13.messages_2026_05_13_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_13.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "constraint:realtime.messages_2026_05_14.messages_2026_05_14_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_14.id", + "deptype": "a" + }, + { + "dependent_stable_id": "constraint:realtime.messages_2026_05_14.messages_2026_05_14_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_14.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "constraint:realtime.messages_2026_05_15.messages_2026_05_15_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_15.id", + "deptype": "a" + }, + { + "dependent_stable_id": "constraint:realtime.messages_2026_05_15.messages_2026_05_15_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_15.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "constraint:realtime.messages_2026_05_16.messages_2026_05_16_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_16.id", + "deptype": "a" + }, + { + "dependent_stable_id": "constraint:realtime.messages_2026_05_16.messages_2026_05_16_pkey", + "referenced_stable_id": "column:realtime.messages_2026_05_16.inserted_at", + "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.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_12.extension", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_12.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_12.private", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_12.topic", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", + "referenced_stable_id": "table:realtime.messages_2026_05_12", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_pkey", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_pkey", + "referenced_stable_id": "table:realtime.messages_2026_05_12", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_13.extension", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_13.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_13.private", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_13.topic", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", + "referenced_stable_id": "table:realtime.messages_2026_05_13", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_pkey", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_pkey", + "referenced_stable_id": "table:realtime.messages_2026_05_13", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_14.extension", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_14.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_14.private", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_14.topic", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", + "referenced_stable_id": "table:realtime.messages_2026_05_14", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_pkey", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_pkey", + "referenced_stable_id": "table:realtime.messages_2026_05_14", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_15.extension", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_15.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_15.private", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_15.topic", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", + "referenced_stable_id": "table:realtime.messages_2026_05_15", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_pkey", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_pkey", + "referenced_stable_id": "table:realtime.messages_2026_05_15", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_16.extension", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_16.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_16.private", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", + "referenced_stable_id": "column:realtime.messages_2026_05_16.topic", + "deptype": "a" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", + "referenced_stable_id": "table:realtime.messages_2026_05_16", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_pkey", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_pkey", + "referenced_stable_id": "table:realtime.messages_2026_05_16", + "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.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": "a" + }, + { + "dependent_stable_id": "publication:supabase_realtime", + "referenced_stable_id": "table:public.test_tenant", + "deptype": "n" + }, + { + "dependent_stable_id": "publication:supabase_realtime_messages_publication", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "publication:supabase_realtime_messages_publication", + "referenced_stable_id": "table:realtime.messages", + "deptype": "a" + }, + { + "dependent_stable_id": "publication:supabase_realtime_messages_publication", + "referenced_stable_id": "table:realtime.messages", + "deptype": "n" + }, + { + "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.messages_2026_05_12", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_12", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_12", + "referenced_stable_id": "table:realtime.messages", + "deptype": "a" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_13", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_13", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_13", + "referenced_stable_id": "table:realtime.messages", + "deptype": "a" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_14", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_14", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_14", + "referenced_stable_id": "table:realtime.messages", + "deptype": "a" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_15", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_15", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_15", + "referenced_stable_id": "table:realtime.messages", + "deptype": "a" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_16", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_16", + "referenced_stable_id": "schema:realtime", + "deptype": "n" + }, + { + "dependent_stable_id": "table:realtime.messages_2026_05_16", + "referenced_stable_id": "table:realtime.messages", + "deptype": "a" + }, + { + "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._messages_2026_05_12", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "type:realtime._messages_2026_05_13", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "type:realtime._messages_2026_05_14", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "type:realtime._messages_2026_05_15", + "referenced_stable_id": "role:supabase_admin", + "deptype": "n" + }, + { + "dependent_stable_id": "type:realtime._messages_2026_05_16", + "referenced_stable_id": "role:supabase_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.17464", + "referenced_stable_id": "column:realtime.messages.extension", + "deptype": "a" + }, + { + "dependent_stable_id": "unknown:pg_class.17464", + "referenced_stable_id": "column:realtime.messages.inserted_at", + "deptype": "a" + }, + { + "dependent_stable_id": "unknown:pg_class.17464", + "referenced_stable_id": "column:realtime.messages.private", + "deptype": "a" + }, + { + "dependent_stable_id": "unknown:pg_class.17464", + "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 From a1bdfc8293182a3fe3b9ccdd1e204da1fb07dd14 Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Thu, 14 May 2026 11:16:41 -0400 Subject: [PATCH 2/9] fix Tenants.Connect -> Database.connect_db --- lib/realtime_web/dashboard/tenant_migrations.ex | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/realtime_web/dashboard/tenant_migrations.ex b/lib/realtime_web/dashboard/tenant_migrations.ex index 70fbc7a3d..2b18a0a69 100644 --- a/lib/realtime_web/dashboard/tenant_migrations.ex +++ b/lib/realtime_web/dashboard/tenant_migrations.ex @@ -12,7 +12,6 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do alias Realtime.Api alias Realtime.Api.Tenant alias Realtime.Database - alias Realtime.Tenants.Connect @pg_delta_filter ~s({"*/schema": "realtime"}) @application_name "realtime_dashboard_tenant_migrations" @@ -39,8 +38,8 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do ref = String.trim(ref) with %Tenant{} = tenant <- Api.get_tenant_by_external_id(ref), - {:ok, db_conn} <- Connect.lookup_or_start_connection(tenant.external_id), - {:ok, settings} <- Database.from_tenant(tenant, @application_name, :stop) do + {:ok, settings} <- Database.from_tenant(tenant, @application_name, :stop), + {:ok, db_conn} <- Database.connect_db(settings) do {:noreply, assign(socket, external_id: ref, From 9eb362c829af18f1aad1ff6d1ccd58f7e20753e5 Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Thu, 14 May 2026 11:33:54 -0400 Subject: [PATCH 3/9] apply action --- .../dashboard/tenant_migrations.ex | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/lib/realtime_web/dashboard/tenant_migrations.ex b/lib/realtime_web/dashboard/tenant_migrations.ex index 2b18a0a69..b2a17acfc 100644 --- a/lib/realtime_web/dashboard/tenant_migrations.ex +++ b/lib/realtime_web/dashboard/tenant_migrations.ex @@ -75,6 +75,27 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do {: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""" @@ -213,6 +234,17 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do >Copy
<%= @sql %>
+
+ +
""" end @@ -298,4 +330,20 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do end end end + + defp apply_pg_delta(%Tenant{} = tenant, sql) do + with {:ok, settings} <- Database.from_tenant(tenant, @application_name, :stop), + {:ok, db_conn} <- Database.connect_db(settings), + {:ok, _} <- Postgrex.query(db_conn, sql, [], query_type: :text, timeout: @query_timeout) 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 From e300fdd7df3d6760bc99817cfbff2d55576aed53 Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Thu, 14 May 2026 11:54:27 -0400 Subject: [PATCH 4/9] add pg_version in tenant info --- lib/realtime_web/dashboard/tenant_info.ex | 50 +++++++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) 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) From b48eb1dbcbdb9ef9b105ad79ca866a4ef96ddfcc Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Thu, 14 May 2026 11:54:32 -0400 Subject: [PATCH 5/9] ci --- .github/workflows/lint.yml | 55 +++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 23c95787f..cbc1dd9e4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -11,6 +11,7 @@ on: - "mix.exs" - "Dockerfile" - "run.sh" + - "mise.toml" - ".github/workflows/lint.yml" push: @@ -21,8 +22,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 @@ -71,3 +75,52 @@ jobs: mix dialyzer.build - 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 From 1ed79211528d935963733136b7d0716b860aa63c Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Thu, 14 May 2026 17:28:20 -0400 Subject: [PATCH 6/9] compressed pgdelta bin --- Dockerfile | 37 ++++++++++++++----- .../realtime.export_tenant_db_baseline.ex | 4 +- .../dashboard/tenant_migrations.ex | 6 +-- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9d57916b0..f02bd9a59 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,16 +4,16 @@ 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 +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; \ - curl -fsSL https://bun.sh/install | bash -s "bun-v1.3.14"; \ + 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" \ @@ -22,7 +22,22 @@ RUN set -eux; \ cd /build/packages/pg-delta; \ bun build --compile src/cli/bin/cli.ts --outfile /tmp/pgdelta; \ /tmp/pgdelta --help > /dev/null; \ - rm -rf /build /root/.bun /var/lib/apt/lists/* + 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 @@ -95,17 +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 /usr/local/bin/pgdelta +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 index 5109d1866..b2621d1e3 100644 --- a/lib/mix/tasks/realtime.export_tenant_db_baseline.ex +++ b/lib/mix/tasks/realtime.export_tenant_db_baseline.ex @@ -14,7 +14,7 @@ defmodule Mix.Tasks.Realtime.ExportTenantDbBaseline do The target DB is expected to already have all tenant migrations applied. - Requires the `pgdelta` binary on `$PATH`. + Requires `pgdelta` on `$PATH`. """ use Mix.Task @@ -26,7 +26,7 @@ defmodule Mix.Tasks.Realtime.ExportTenantDbBaseline do Mix.shell().info("[export_tenant_db_baseline] target: #{redact(url)}") unless System.find_executable("pgdelta") do - Mix.raise("pgdelta binary not found on PATH") + Mix.raise("pgdelta not found on PATH") end output = Path.expand(@baseline_path, File.cwd!()) diff --git a/lib/realtime_web/dashboard/tenant_migrations.ex b/lib/realtime_web/dashboard/tenant_migrations.ex index b2a17acfc..e4453e256 100644 --- a/lib/realtime_web/dashboard/tenant_migrations.ex +++ b/lib/realtime_web/dashboard/tenant_migrations.ex @@ -2,7 +2,7 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do @moduledoc """ Live Dashboard page to inspect tenant migrations state. - Requires `pgdelta` binary on `$PATH`. + Requires `pgdelta` on `$PATH`. Regenerate the baseline with `mix realtime.export_tenant_db_baseline`. """ @@ -299,8 +299,8 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do defp run_pg_delta(%Database{} = settings) do case System.find_executable("pgdelta") do nil -> - log_warning("TenantMigrationsPgDeltaMissing", "pgdelta binary not found on PATH") - {:error, "pgdelta binary not found on PATH"} + 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") From a8cd55a3511f54bce6a0199bae1905f7af85a190 Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Thu, 14 May 2026 18:12:05 -0400 Subject: [PATCH 7/9] fixes --- .../dashboard/tenant_migrations.ex | 8 +- priv/repo/tenant_db_baseline.json | 10017 ++++++---------- 2 files changed, 3972 insertions(+), 6053 deletions(-) diff --git a/lib/realtime_web/dashboard/tenant_migrations.ex b/lib/realtime_web/dashboard/tenant_migrations.ex index e4453e256..d49e3e419 100644 --- a/lib/realtime_web/dashboard/tenant_migrations.ex +++ b/lib/realtime_web/dashboard/tenant_migrations.ex @@ -13,7 +13,7 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do alias Realtime.Api.Tenant alias Realtime.Database - @pg_delta_filter ~s({"*/schema": "realtime"}) + @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" @@ -115,7 +115,7 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do autocomplete="off" spellcheck="false" /> - + <%= if @error do %> @@ -332,9 +332,11 @@ defmodule RealtimeWeb.Dashboard.TenantMigrations do 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, [], query_type: :text, timeout: @query_timeout) do + {:ok, _} <- Postgrex.query(db_conn, sql, [], opts) do :ok else {:error, %{postgres: %{message: message}}} -> diff --git a/priv/repo/tenant_db_baseline.json b/priv/repo/tenant_db_baseline.json index ffa826166..e4ddd256a 100644 --- a/priv/repo/tenant_db_baseline.json +++ b/priv/repo/tenant_db_baseline.json @@ -1650,6 +1650,59 @@ ], "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", @@ -1955,25 +2008,25 @@ "comment": null, "owner": "supabase_auth_admin" }, - "index:auth.refresh_tokens.refresh_tokens_instance_id_idx": { + "index:auth.refresh_tokens.refresh_tokens_pkey": { "schema": "auth", "table_name": "refresh_tokens", - "name": "refresh_tokens_instance_id_idx", + "name": "refresh_tokens_pkey", "storage_params": [], "statistics_target": [ -1 ], "index_type": "btree", "tablespace": null, - "is_unique": false, - "is_primary": false, + "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 + 2 ], "column_collations": [ null @@ -1987,11 +2040,11 @@ "index_expressions": null, "partial_predicate": null, "table_relkind": "r", - "is_owned_by_constraint": false, + "is_owned_by_constraint": true, "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)", + "definition": "CREATE UNIQUE INDEX refresh_tokens_pkey ON auth.refresh_tokens USING btree (id)", "comment": null, "owner": "supabase_auth_admin" }, @@ -2035,53 +2088,57 @@ "comment": null, "owner": "supabase_auth_admin" }, - "index:auth.refresh_tokens.refresh_tokens_pkey": { + "index:auth.refresh_tokens.refresh_tokens_instance_id_user_id_idx": { "schema": "auth", "table_name": "refresh_tokens", - "name": "refresh_tokens_pkey", + "name": "refresh_tokens_instance_id_user_id_idx", "storage_params": [], "statistics_target": [ + -1, -1 ], "index_type": "btree", "tablespace": null, - "is_unique": true, - "is_primary": true, + "is_unique": false, + "is_primary": false, "is_exclusion": false, "nulls_not_distinct": false, "immediate": true, "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 2 + 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": true, + "is_owned_by_constraint": false, "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)", + "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_user_id_idx": { + "index:auth.refresh_tokens.refresh_tokens_instance_id_idx": { "schema": "auth", "table_name": "refresh_tokens", - "name": "refresh_tokens_instance_id_user_id_idx", + "name": "refresh_tokens_instance_id_idx", "storage_params": [], "statistics_target": [ - -1, -1 ], "index_type": "btree", @@ -2094,19 +2151,15 @@ "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 1, - 4 + 1 ], "column_collations": [ - null, null ], "operator_classes": [ - "default", "default" ], "column_options": [ - 0, 0 ], "index_expressions": null, @@ -2116,7 +2169,7 @@ "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)", + "definition": "CREATE INDEX refresh_tokens_instance_id_idx ON auth.refresh_tokens USING btree (instance_id)", "comment": null, "owner": "supabase_auth_admin" }, @@ -2200,17 +2253,17 @@ "comment": null, "owner": "supabase_auth_admin" }, - "index:auth.users.users_instance_id_idx": { + "index:auth.users.users_email_key": { "schema": "auth", "table_name": "users", - "name": "users_instance_id_idx", + "name": "users_email_key", "storage_params": [], "statistics_target": [ -1 ], "index_type": "btree", "tablespace": null, - "is_unique": false, + "is_unique": true, "is_primary": false, "is_exclusion": false, "nulls_not_distinct": false, @@ -2218,7 +2271,7 @@ "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 1 + 5 ], "column_collations": [ null @@ -2232,11 +2285,11 @@ "index_expressions": null, "partial_predicate": null, "table_relkind": "r", - "is_owned_by_constraint": false, + "is_owned_by_constraint": true, "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)", + "definition": "CREATE UNIQUE INDEX users_email_key ON auth.users USING btree (email)", "comment": null, "owner": "supabase_auth_admin" }, @@ -2285,17 +2338,17 @@ "comment": null, "owner": "supabase_auth_admin" }, - "index:auth.users.users_email_key": { + "index:auth.users.users_instance_id_idx": { "schema": "auth", "table_name": "users", - "name": "users_email_key", + "name": "users_instance_id_idx", "storage_params": [], "statistics_target": [ -1 ], "index_type": "btree", "tablespace": null, - "is_unique": true, + "is_unique": false, "is_primary": false, "is_exclusion": false, "nulls_not_distinct": false, @@ -2303,7 +2356,7 @@ "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 5 + 1 ], "column_collations": [ null @@ -2317,11 +2370,11 @@ "index_expressions": null, "partial_predicate": null, "table_relkind": "r", - "is_owned_by_constraint": true, + "is_owned_by_constraint": false, "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)", + "definition": "CREATE INDEX users_instance_id_idx ON auth.users USING btree (instance_id)", "comment": null, "owner": "supabase_auth_admin" }, @@ -2384,8 +2437,8 @@ "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 8, - 7 + 10, + 9 ], "column_collations": [ null, @@ -2429,8 +2482,8 @@ "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 7, - 1 + 9, + 3 ], "column_collations": [ null, @@ -2455,13 +2508,12 @@ "comment": null, "owner": "supabase_realtime_admin" }, - "index:realtime.messages_2026_05_12.messages_2026_05_12_pkey": { + "index:realtime.schema_migrations.schema_migrations_pkey": { "schema": "realtime", - "table_name": "messages_2026_05_12", - "name": "messages_2026_05_12_pkey", + "table_name": "schema_migrations", + "name": "schema_migrations_pkey", "storage_params": [], "statistics_target": [ - -1, -1 ], "index_type": "btree", @@ -2474,19 +2526,15 @@ "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 8, - 7 + 1 ], "column_collations": [ - null, null ], "operator_classes": [ - "default", "default" ], "column_options": [ - 0, 0 ], "index_expressions": null, @@ -2494,64 +2542,18 @@ "table_relkind": "r", "is_owned_by_constraint": true, "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_pkey", - "definition": "CREATE UNIQUE INDEX messages_2026_05_12_pkey ON realtime.messages_2026_05_12 USING btree (id, inserted_at)", - "comment": null, - "owner": "supabase_admin" - }, - "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx": { - "schema": "realtime", - "table_name": "messages_2026_05_12", - "name": "messages_2026_05_12_inserted_at_topic_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": [ - 7, - 1 - ], - "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": "r", - "is_owned_by_constraint": false, - "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_inserted_at_topic_index", - "definition": "CREATE INDEX messages_2026_05_12_inserted_at_topic_idx ON realtime.messages_2026_05_12 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", + "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.messages_2026_05_13.messages_2026_05_13_pkey": { + "index:realtime.subscription.pk_subscription": { "schema": "realtime", - "table_name": "messages_2026_05_13", - "name": "messages_2026_05_13_pkey", + "table_name": "subscription", + "name": "pk_subscription", "storage_params": [], "statistics_target": [ - -1, -1 ], "index_type": "btree", @@ -2564,19 +2566,15 @@ "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 8, - 7 + 1 ], "column_collations": [ - null, null ], "operator_classes": [ - "default", "default" ], "column_options": [ - 0, 0 ], "index_expressions": null, @@ -2584,19 +2582,18 @@ "table_relkind": "r", "is_owned_by_constraint": true, "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_pkey", - "definition": "CREATE UNIQUE INDEX messages_2026_05_13_pkey ON realtime.messages_2026_05_13 USING btree (id, inserted_at)", + "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.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx": { + "index:realtime.subscription.ix_realtime_subscription_entity": { "schema": "realtime", - "table_name": "messages_2026_05_13", - "name": "messages_2026_05_13_inserted_at_topic_idx", + "table_name": "subscription", + "name": "ix_realtime_subscription_entity", "storage_params": [], "statistics_target": [ - -1, -1 ], "index_type": "btree", @@ -2609,2728 +2606,222 @@ "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 7, - 1 + 4 ], "column_collations": [ - null, null ], "operator_classes": [ - "default", "default" ], "column_options": [ - 3, 0 ], "index_expressions": null, - "partial_predicate": "((extension = 'broadcast'::text) AND (private IS TRUE))", + "partial_predicate": null, "table_relkind": "r", "is_owned_by_constraint": false, "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_inserted_at_topic_index", - "definition": "CREATE INDEX messages_2026_05_13_inserted_at_topic_idx ON realtime.messages_2026_05_13 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", + "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.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx": { + "index:realtime.subscription.subscription_subscription_id_entity_filters_action_filter_key": { "schema": "realtime", - "table_name": "messages_2026_05_14", - "name": "messages_2026_05_14_inserted_at_topic_idx", + "table_name": "subscription", + "name": "subscription_subscription_id_entity_filters_action_filter_key", "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": [ - 7, - 1 - ], - "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": "r", - "is_owned_by_constraint": false, - "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_inserted_at_topic_index", - "definition": "CREATE INDEX messages_2026_05_14_inserted_at_topic_idx ON realtime.messages_2026_05_14 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", - "comment": null, - "owner": "supabase_admin" - }, - "index:realtime.messages_2026_05_14.messages_2026_05_14_pkey": { - "schema": "realtime", - "table_name": "messages_2026_05_14", - "name": "messages_2026_05_14_pkey", - "storage_params": [], - "statistics_target": [ + -1, -1, -1 ], "index_type": "btree", "tablespace": null, "is_unique": true, - "is_primary": true, + "is_primary": false, "is_exclusion": false, "nulls_not_distinct": false, "immediate": true, "is_clustered": false, "is_replica_identity": false, "key_columns": [ - 8, - 7 + 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": true, + "is_owned_by_constraint": false, "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_pkey", - "definition": "CREATE UNIQUE INDEX messages_2026_05_14_pkey ON realtime.messages_2026_05_14 USING btree (id, inserted_at)", + "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" - }, - "index:realtime.messages_2026_05_15.messages_2026_05_15_pkey": { - "schema": "realtime", - "table_name": "messages_2026_05_15", - "name": "messages_2026_05_15_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": [ - 8, - 7 - ], - "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": true, - "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_pkey", - "definition": "CREATE UNIQUE INDEX messages_2026_05_15_pkey ON realtime.messages_2026_05_15 USING btree (id, inserted_at)", - "comment": null, - "owner": "supabase_admin" - }, - "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx": { - "schema": "realtime", - "table_name": "messages_2026_05_15", - "name": "messages_2026_05_15_inserted_at_topic_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": [ - 7, - 1 - ], - "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": "r", - "is_owned_by_constraint": false, - "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_inserted_at_topic_index", - "definition": "CREATE INDEX messages_2026_05_15_inserted_at_topic_idx ON realtime.messages_2026_05_15 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", - "comment": null, - "owner": "supabase_admin" - }, - "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx": { - "schema": "realtime", - "table_name": "messages_2026_05_16", - "name": "messages_2026_05_16_inserted_at_topic_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": [ - 7, - 1 - ], - "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": "r", - "is_owned_by_constraint": false, - "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_inserted_at_topic_index", - "definition": "CREATE INDEX messages_2026_05_16_inserted_at_topic_idx ON realtime.messages_2026_05_16 USING btree (inserted_at DESC, topic) WHERE extension = 'broadcast'::text AND private IS TRUE", - "comment": null, - "owner": "supabase_admin" - }, - "index:realtime.messages_2026_05_16.messages_2026_05_16_pkey": { - "schema": "realtime", - "table_name": "messages_2026_05_16", - "name": "messages_2026_05_16_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": [ - 8, - 7 - ], - "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": true, - "is_partitioned_index": false, - "is_index_partition": true, - "parent_index_name": "realtime.messages_pkey", - "definition": "CREATE UNIQUE INDEX messages_2026_05_16_pkey ON realtime.messages_2026_05_16 USING btree (id, inserted_at)", - "comment": null, - "owner": "supabase_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.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.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.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": [ - 12, - 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": [] - }, - "publication:supabase_realtime_messages_publication": { - "name": "supabase_realtime_messages_publication", - "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": "realtime", - "name": "messages", - "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 - }, + } + }, + "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": [ { - "in_schema": "extensions", - "objtype": "f", - "grantee": "postgres", - "privileges": [ - { - "privilege": "EXECUTE", - "grantable": true - } - ], - "is_implicit": false - }, + "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": [ { - "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 + "member": "authenticator", + "grantor": "supabase_admin", + "admin_option": false, + "inherit_option": false, + "set_option": true }, { - "in_schema": "graphql_public", - "objtype": "S", - "grantee": "postgres", - "privileges": [ - { - "privilege": "SELECT", - "grantable": false - }, - { - "privilege": "UPDATE", - "grantable": false - }, - { - "privilege": "USAGE", - "grantable": false - } - ], - "is_implicit": false - }, + "member": "postgres", + "grantor": "supabase_admin", + "admin_option": true, + "inherit_option": true, + "set_option": true + } + ], + "default_privileges": [ { - "in_schema": "graphql_public", + "in_schema": null, "objtype": "S", "grantee": "anon", "privileges": [ - { - "privilege": "SELECT", - "grantable": false - }, - { - "privilege": "UPDATE", - "grantable": false - }, { "privilege": "USAGE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql_public", - "objtype": "S", - "grantee": "authenticated", + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", "privileges": [ - { - "privilege": "SELECT", - "grantable": false - }, - { - "privilege": "UPDATE", - "grantable": false - }, { "privilege": "USAGE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql_public", - "objtype": "S", - "grantee": "service_role", + "in_schema": null, + "objtype": "T", + "grantee": "anon", "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 + "is_implicit": true }, { - "in_schema": "graphql_public", + "in_schema": null, "objtype": "f", - "grantee": "anon", + "grantee": "PUBLIC", "privileges": [ { "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql_public", + "in_schema": null, "objtype": "f", - "grantee": "authenticated", + "grantee": "anon", "privileges": [ { "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql_public", - "objtype": "f", - "grantee": "service_role", + "in_schema": null, + "objtype": "n", + "grantee": "anon", "privileges": [ { - "privilege": "EXECUTE", + "privilege": "CREATE", + "grantable": false + }, + { + "privilege": "USAGE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql_public", + "in_schema": null, "objtype": "r", - "grantee": "postgres", + "grantee": "anon", "privileges": [ { "privilege": "DELETE", @@ -5365,50 +2856,120 @@ "grantable": false } ], - "is_implicit": 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 }, { - "in_schema": "graphql_public", - "objtype": "r", - "grantee": "anon", + "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": "DELETE", - "grantable": false - }, - { - "privilege": "INSERT", + "privilege": "USAGE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", + "privileges": [ { - "privilege": "MAINTAIN", + "privilege": "USAGE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "T", + "grantee": "authenticated", + "privileges": [ { - "privilege": "REFERENCES", + "privilege": "USAGE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "f", + "grantee": "PUBLIC", + "privileges": [ { - "privilege": "SELECT", + "privilege": "EXECUTE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "f", + "grantee": "authenticated", + "privileges": [ { - "privilege": "TRIGGER", + "privilege": "EXECUTE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "n", + "grantee": "authenticated", + "privileges": [ { - "privilege": "TRUNCATE", + "privilege": "CREATE", "grantable": false }, { - "privilege": "UPDATE", + "privilege": "USAGE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql_public", + "in_schema": null, "objtype": "r", "grantee": "authenticated", "privileges": [ @@ -5445,59 +3006,111 @@ "grantable": false } ], - "is_implicit": 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 }, { - "in_schema": "graphql_public", - "objtype": "r", - "grantee": "service_role", + "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": "DELETE", - "grantable": false - }, - { - "privilege": "INSERT", - "grantable": false - }, - { - "privilege": "MAINTAIN", - "grantable": false - }, - { - "privilege": "REFERENCES", - "grantable": false - }, - { - "privilege": "SELECT", + "privilege": "USAGE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", + "privileges": [ { - "privilege": "TRIGGER", + "privilege": "USAGE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "T", + "grantee": "authenticator", + "privileges": [ { - "privilege": "TRUNCATE", + "privilege": "USAGE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "f", + "grantee": "PUBLIC", + "privileges": [ { - "privilege": "UPDATE", + "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql", - "objtype": "S", - "grantee": "postgres", + "in_schema": null, + "objtype": "f", + "grantee": "authenticator", "privileges": [ { - "privilege": "SELECT", + "privilege": "EXECUTE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "n", + "grantee": "authenticator", + "privileges": [ { - "privilege": "UPDATE", + "privilege": "CREATE", "grantable": false }, { @@ -5505,160 +3118,145 @@ "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql", - "objtype": "S", - "grantee": "anon", + "in_schema": null, + "objtype": "r", + "grantee": "authenticator", "privileges": [ { - "privilege": "SELECT", + "privilege": "DELETE", "grantable": false }, { - "privilege": "UPDATE", + "privilege": "INSERT", "grantable": false }, { - "privilege": "USAGE", + "privilege": "MAINTAIN", "grantable": false - } - ], - "is_implicit": false - }, - { - "in_schema": "graphql", - "objtype": "S", - "grantee": "authenticated", - "privileges": [ + }, { - "privilege": "SELECT", + "privilege": "REFERENCES", "grantable": false }, { - "privilege": "UPDATE", + "privilege": "SELECT", "grantable": false }, { - "privilege": "USAGE", + "privilege": "TRIGGER", "grantable": false - } - ], - "is_implicit": false - }, - { - "in_schema": "graphql", - "objtype": "S", - "grantee": "service_role", - "privileges": [ + }, { - "privilege": "SELECT", + "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": false + "is_implicit": true }, { - "in_schema": "graphql", - "objtype": "f", - "grantee": "postgres", + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", "privileges": [ { - "privilege": "EXECUTE", + "privilege": "USAGE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql", - "objtype": "f", - "grantee": "anon", + "in_schema": null, + "objtype": "T", + "grantee": "dashboard_user", "privileges": [ { - "privilege": "EXECUTE", + "privilege": "USAGE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql", + "in_schema": null, "objtype": "f", - "grantee": "authenticated", + "grantee": "PUBLIC", "privileges": [ { "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql", + "in_schema": null, "objtype": "f", - "grantee": "service_role", + "grantee": "dashboard_user", "privileges": [ { "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql", - "objtype": "r", - "grantee": "postgres", + "in_schema": null, + "objtype": "n", + "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", + "privilege": "CREATE", "grantable": false }, { - "privilege": "UPDATE", + "privilege": "USAGE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql", + "in_schema": null, "objtype": "r", - "grantee": "anon", + "grantee": "dashboard_user", "privileges": [ { "privilege": "DELETE", @@ -5693,52 +3291,105 @@ "grantable": false } ], - "is_implicit": 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": "graphql", - "objtype": "r", - "grantee": "authenticated", + "in_schema": null, + "objtype": "S", + "grantee": "pgbouncer", "privileges": [ { - "privilege": "DELETE", - "grantable": false - }, - { - "privilege": "INSERT", + "privilege": "USAGE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", + "privileges": [ { - "privilege": "MAINTAIN", + "privilege": "USAGE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "T", + "grantee": "pgbouncer", + "privileges": [ { - "privilege": "REFERENCES", + "privilege": "USAGE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "f", + "grantee": "PUBLIC", + "privileges": [ { - "privilege": "SELECT", + "privilege": "EXECUTE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "f", + "grantee": "pgbouncer", + "privileges": [ { - "privilege": "TRIGGER", + "privilege": "EXECUTE", "grantable": false - }, + } + ], + "is_implicit": true + }, + { + "in_schema": null, + "objtype": "n", + "grantee": "pgbouncer", + "privileges": [ { - "privilege": "TRUNCATE", + "privilege": "CREATE", "grantable": false }, { - "privilege": "UPDATE", + "privilege": "USAGE", "grantable": false } ], - "is_implicit": false + "is_implicit": true }, { - "in_schema": "graphql", + "in_schema": null, "objtype": "r", - "grantee": "service_role", + "grantee": "pgbouncer", "privileges": [ { "privilege": "DELETE", @@ -5773,25 +3424,23 @@ "grantable": false } ], - "is_implicit": false + "is_implicit": true } ], "security_labels": [] }, - "role:supabase_auth_admin": { - "name": "supabase_auth_admin", + "role:postgres": { + "name": "postgres", "is_superuser": false, - "can_inherit": false, + "can_inherit": true, "can_create_roles": true, - "can_create_databases": false, + "can_create_databases": true, "can_login": true, - "can_replicate": false, + "can_replicate": true, "connection_limit": -1, - "can_bypass_rls": false, + "can_bypass_rls": true, "config": [ - "search_path=auth", - "idle_in_transaction_session_timeout=60000", - "log_statement=none" + "search_path=\"\\$user\", public, extensions" ], "comment": null, "members": [], @@ -5799,7 +3448,7 @@ { "in_schema": null, "objtype": "S", - "grantee": "supabase_auth_admin", + "grantee": "postgres", "privileges": [ { "privilege": "USAGE", @@ -5823,7 +3472,7 @@ { "in_schema": null, "objtype": "T", - "grantee": "supabase_auth_admin", + "grantee": "postgres", "privileges": [ { "privilege": "USAGE", @@ -5847,7 +3496,7 @@ { "in_schema": null, "objtype": "f", - "grantee": "supabase_auth_admin", + "grantee": "postgres", "privileges": [ { "privilege": "EXECUTE", @@ -5859,7 +3508,7 @@ { "in_schema": null, "objtype": "n", - "grantee": "supabase_auth_admin", + "grantee": "postgres", "privileges": [ { "privilege": "CREATE", @@ -5875,7 +3524,7 @@ { "in_schema": null, "objtype": "r", - "grantee": "supabase_auth_admin", + "grantee": "postgres", "privileges": [ { "privilege": "DELETE", @@ -5913,7 +3562,7 @@ "is_implicit": true }, { - "in_schema": "auth", + "in_schema": "public", "objtype": "S", "grantee": "postgres", "privileges": [ @@ -5933,9 +3582,9 @@ "is_implicit": false }, { - "in_schema": "auth", + "in_schema": "public", "objtype": "S", - "grantee": "dashboard_user", + "grantee": "anon", "privileges": [ { "privilege": "SELECT", @@ -5953,7 +3602,47 @@ "is_implicit": false }, { - "in_schema": "auth", + "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": [ @@ -5965,9 +3654,9 @@ "is_implicit": false }, { - "in_schema": "auth", + "in_schema": "public", "objtype": "f", - "grantee": "dashboard_user", + "grantee": "anon", "privileges": [ { "privilege": "EXECUTE", @@ -5977,7 +3666,31 @@ "is_implicit": false }, { - "in_schema": "auth", + "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": [ @@ -6017,9 +3730,9 @@ "is_implicit": false }, { - "in_schema": "auth", + "in_schema": "public", "objtype": "r", - "grantee": "dashboard_user", + "grantee": "anon", "privileges": [ { "privilege": "DELETE", @@ -6055,104 +3768,51 @@ } ], "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", + "in_schema": "public", + "objtype": "r", + "grantee": "authenticated", "privileges": [ { - "privilege": "USAGE", + "privilege": "DELETE", "grantable": false - } - ], - "is_implicit": true - }, - { - "in_schema": null, - "objtype": "T", - "grantee": "PUBLIC", - "privileges": [ + }, { - "privilege": "USAGE", + "privilege": "INSERT", "grantable": false - } - ], - "is_implicit": true - }, - { - "in_schema": null, - "objtype": "T", - "grantee": "supabase_etl_admin", - "privileges": [ + }, { - "privilege": "USAGE", + "privilege": "MAINTAIN", "grantable": false - } - ], - "is_implicit": true - }, - { - "in_schema": null, - "objtype": "f", - "grantee": "PUBLIC", - "privileges": [ + }, { - "privilege": "EXECUTE", + "privilege": "REFERENCES", "grantable": false - } - ], - "is_implicit": true - }, - { - "in_schema": null, - "objtype": "f", - "grantee": "supabase_etl_admin", - "privileges": [ + }, { - "privilege": "EXECUTE", + "privilege": "SELECT", "grantable": false - } - ], - "is_implicit": true - }, - { - "in_schema": null, - "objtype": "n", - "grantee": "supabase_etl_admin", - "privileges": [ + }, { - "privilege": "CREATE", + "privilege": "TRIGGER", "grantable": false }, { - "privilege": "USAGE", + "privilege": "TRUNCATE", + "grantable": false + }, + { + "privilege": "UPDATE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, + "in_schema": "public", "objtype": "r", - "grantee": "supabase_etl_admin", + "grantee": "service_role", "privileges": [ { "privilege": "DELETE", @@ -6187,107 +3847,140 @@ "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": [ + "is_implicit": false + }, { - "in_schema": null, + "in_schema": "storage", "objtype": "S", - "grantee": "supabase_read_only_user", + "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": true + "is_implicit": false }, { - "in_schema": null, - "objtype": "T", - "grantee": "PUBLIC", + "in_schema": "storage", + "objtype": "S", + "grantee": "authenticated", "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, { "privilege": "USAGE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, - "objtype": "T", - "grantee": "supabase_read_only_user", + "in_schema": "storage", + "objtype": "S", + "grantee": "service_role", "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, { "privilege": "USAGE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, + "in_schema": "storage", "objtype": "f", - "grantee": "PUBLIC", + "grantee": "postgres", "privileges": [ { "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, + "in_schema": "storage", "objtype": "f", - "grantee": "supabase_read_only_user", + "grantee": "anon", "privileges": [ { "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, - "objtype": "n", - "grantee": "supabase_read_only_user", + "in_schema": "storage", + "objtype": "f", + "grantee": "authenticated", "privileges": [ { - "privilege": "CREATE", + "privilege": "EXECUTE", "grantable": false - }, + } + ], + "is_implicit": false + }, + { + "in_schema": "storage", + "objtype": "f", + "grantee": "service_role", + "privileges": [ { - "privilege": "USAGE", + "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, + "in_schema": "storage", "objtype": "r", - "grantee": "supabase_read_only_user", + "grantee": "postgres", "privileges": [ { "privilege": "DELETE", @@ -6322,113 +4015,92 @@ "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": [ + "is_implicit": false + }, { - "in_schema": null, - "objtype": "S", - "grantee": "supabase_realtime_admin", + "in_schema": "storage", + "objtype": "r", + "grantee": "anon", "privileges": [ { - "privilege": "USAGE", + "privilege": "DELETE", "grantable": false - } - ], - "is_implicit": true - }, - { - "in_schema": null, - "objtype": "T", - "grantee": "PUBLIC", - "privileges": [ + }, { - "privilege": "USAGE", + "privilege": "INSERT", "grantable": false - } - ], - "is_implicit": true - }, - { - "in_schema": null, - "objtype": "T", - "grantee": "supabase_realtime_admin", - "privileges": [ + }, { - "privilege": "USAGE", + "privilege": "MAINTAIN", "grantable": false - } - ], - "is_implicit": true - }, - { - "in_schema": null, - "objtype": "f", - "grantee": "PUBLIC", - "privileges": [ + }, { - "privilege": "EXECUTE", + "privilege": "REFERENCES", "grantable": false - } - ], - "is_implicit": true - }, - { - "in_schema": null, - "objtype": "f", - "grantee": "supabase_realtime_admin", - "privileges": [ + }, { - "privilege": "EXECUTE", + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "TRIGGER", + "grantable": false + }, + { + "privilege": "TRUNCATE", + "grantable": false + }, + { + "privilege": "UPDATE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, - "objtype": "n", - "grantee": "supabase_realtime_admin", + "in_schema": "storage", + "objtype": "r", + "grantee": "authenticated", "privileges": [ { - "privilege": "CREATE", + "privilege": "DELETE", "grantable": false }, { - "privilege": "USAGE", + "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 + "is_implicit": false }, { - "in_schema": null, + "in_schema": "storage", "objtype": "r", - "grantee": "supabase_realtime_admin", + "grantee": "service_role", "privileges": [ { "privilege": "DELETE", @@ -6463,29 +4135,44 @@ "grantable": false } ], - "is_implicit": true + "is_implicit": false } ], "security_labels": [] }, - "role:supabase_replication_admin": { - "name": "supabase_replication_admin", + "role:service_role": { + "name": "service_role", "is_superuser": false, "can_inherit": true, "can_create_roles": false, "can_create_databases": false, - "can_login": true, - "can_replicate": true, + "can_login": false, + "can_replicate": false, "connection_limit": -1, - "can_bypass_rls": false, + "can_bypass_rls": true, "config": null, "comment": null, - "members": [], + "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": "supabase_replication_admin", + "grantee": "service_role", "privileges": [ { "privilege": "USAGE", @@ -6509,7 +4196,7 @@ { "in_schema": null, "objtype": "T", - "grantee": "supabase_replication_admin", + "grantee": "service_role", "privileges": [ { "privilege": "USAGE", @@ -6533,7 +4220,7 @@ { "in_schema": null, "objtype": "f", - "grantee": "supabase_replication_admin", + "grantee": "service_role", "privileges": [ { "privilege": "EXECUTE", @@ -6545,7 +4232,7 @@ { "in_schema": null, "objtype": "n", - "grantee": "supabase_replication_admin", + "grantee": "service_role", "privileges": [ { "privilege": "CREATE", @@ -6561,7 +4248,7 @@ { "in_schema": null, "objtype": "r", - "grantee": "supabase_replication_admin", + "grantee": "service_role", "privileges": [ { "privilege": "DELETE", @@ -6601,18 +4288,18 @@ ], "security_labels": [] }, - "role:supabase_storage_admin": { - "name": "supabase_storage_admin", - "is_superuser": false, - "can_inherit": false, + "role:supabase_admin": { + "name": "supabase_admin", + "is_superuser": true, + "can_inherit": true, "can_create_roles": true, - "can_create_databases": false, + "can_create_databases": true, "can_login": true, - "can_replicate": false, + "can_replicate": true, "connection_limit": -1, - "can_bypass_rls": false, + "can_bypass_rls": true, "config": [ - "search_path=storage", + "search_path=\"\\$user\", public, auth, extensions", "log_statement=none" ], "comment": null, @@ -6621,7 +4308,7 @@ { "in_schema": null, "objtype": "S", - "grantee": "supabase_storage_admin", + "grantee": "supabase_admin", "privileges": [ { "privilege": "USAGE", @@ -6645,7 +4332,7 @@ { "in_schema": null, "objtype": "T", - "grantee": "supabase_storage_admin", + "grantee": "supabase_admin", "privileges": [ { "privilege": "USAGE", @@ -6669,7 +4356,7 @@ { "in_schema": null, "objtype": "f", - "grantee": "supabase_storage_admin", + "grantee": "supabase_admin", "privileges": [ { "privilege": "EXECUTE", @@ -6681,7 +4368,7 @@ { "in_schema": null, "objtype": "n", - "grantee": "supabase_storage_admin", + "grantee": "supabase_admin", "privileges": [ { "privilege": "CREATE", @@ -6697,7 +4384,7 @@ { "in_schema": null, "objtype": "r", - "grantee": "supabase_storage_admin", + "grantee": "supabase_admin", "privileges": [ { "privilege": "DELETE", @@ -6733,119 +4420,259 @@ } ], "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": "public", + "objtype": "S", + "grantee": "postgres", + "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": false + }, { - "in_schema": null, + "in_schema": "public", "objtype": "S", - "grantee": "supabase_superuser", + "grantee": "anon", "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, { "privilege": "USAGE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, - "objtype": "T", - "grantee": "PUBLIC", + "in_schema": "public", + "objtype": "S", + "grantee": "authenticated", "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, { "privilege": "USAGE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, - "objtype": "T", - "grantee": "supabase_superuser", + "in_schema": "public", + "objtype": "S", + "grantee": "service_role", "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, { "privilege": "USAGE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, + "in_schema": "public", "objtype": "f", - "grantee": "PUBLIC", + "grantee": "postgres", "privileges": [ { "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, + "in_schema": "public", "objtype": "f", - "grantee": "supabase_superuser", + "grantee": "anon", "privileges": [ { "privilege": "EXECUTE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, - "objtype": "n", - "grantee": "supabase_superuser", + "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": "CREATE", + "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": "USAGE", + "privilege": "TRUNCATE", + "grantable": false + }, + { + "privilege": "UPDATE", "grantable": false } ], - "is_implicit": true + "is_implicit": false }, { - "in_schema": null, + "in_schema": "public", "objtype": "r", - "grantee": "supabase_superuser", + "grantee": "service_role", "privileges": [ { "privilege": "DELETE", @@ -6880,1950 +4707,2331 @@ "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 + "is_implicit": false }, { + "in_schema": "extensions", + "objtype": "S", "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 + "privileges": [ + { + "privilege": "SELECT", + "grantable": true + }, + { + "privilege": "UPDATE", + "grantable": true + }, + { + "privilege": "USAGE", + "grantable": true + } + ], + "is_implicit": false }, { + "in_schema": "extensions", + "objtype": "f", "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 + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": true + } + ], + "is_implicit": false }, { - "grantee": "pg_database_owner", - "privilege": "USAGE", - "grantable": 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", - "privilege": "USAGE", - "grantable": false + "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": false }, { + "in_schema": "graphql_public", + "objtype": "S", "grantee": "anon", - "privilege": "USAGE", - "grantable": false + "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": false }, { + "in_schema": "graphql_public", + "objtype": "S", "grantee": "authenticated", - "privilege": "USAGE", - "grantable": false + "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", - "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 + "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": false }, { + "in_schema": "graphql_public", + "objtype": "f", "grantee": "postgres", - "privilege": "USAGE", - "grantable": false + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { + "in_schema": "graphql_public", + "objtype": "f", "grantee": "anon", - "privilege": "USAGE", - "grantable": false + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { + "in_schema": "graphql_public", + "objtype": "f", "grantee": "authenticated", - "privilege": "USAGE", - "grantable": false + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { + "in_schema": "graphql_public", + "objtype": "f", "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 + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { + "in_schema": "graphql_public", + "objtype": "r", "grantee": "postgres", - "privilege": "USAGE", - "grantable": true + "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", - "privilege": "USAGE", - "grantable": false + "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", - "privilege": "USAGE", - "grantable": false + "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", - "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 + "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 }, { - "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 + "in_schema": "graphql", + "objtype": "S", + "grantee": "postgres", + "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": false }, { - "grantee": "supabase_admin", - "privilege": "USAGE", - "grantable": false + "in_schema": "graphql", + "objtype": "S", + "grantee": "anon", + "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": false }, { - "grantee": "postgres", - "privilege": "USAGE", - "grantable": true + "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", - "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 + "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": false }, { + "in_schema": "graphql", + "objtype": "f", "grantee": "postgres", - "privilege": "USAGE", - "grantable": false + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { - "grantee": "supabase_auth_admin", - "privilege": "SELECT", - "grantable": false + "in_schema": "graphql", + "objtype": "f", + "grantee": "anon", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { - "grantee": "supabase_auth_admin", - "privilege": "UPDATE", - "grantable": false + "in_schema": "graphql", + "objtype": "f", + "grantee": "authenticated", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { - "grantee": "supabase_auth_admin", - "privilege": "USAGE", - "grantable": false + "in_schema": "graphql", + "objtype": "f", + "grantee": "service_role", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { - "grantee": "dashboard_user", - "privilege": "SELECT", - "grantable": 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 }, { - "grantee": "dashboard_user", - "privilege": "UPDATE", - "grantable": 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 }, { - "grantee": "dashboard_user", - "privilege": "USAGE", - "grantable": 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 } ], - "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", + "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, - "privileges": [ + "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 + }, { - "grantee": "supabase_admin", - "privilege": "SELECT", - "grantable": false + "in_schema": null, + "objtype": "T", + "grantee": "supabase_auth_admin", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "supabase_admin", - "privilege": "UPDATE", - "grantable": false + "in_schema": null, + "objtype": "f", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "supabase_admin", - "privilege": "USAGE", - "grantable": false + "in_schema": null, + "objtype": "f", + "grantee": "supabase_auth_admin", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "SELECT", - "grantable": false + "in_schema": null, + "objtype": "n", + "grantee": "supabase_auth_admin", + "privileges": [ + { + "privilege": "CREATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "UPDATE", - "grantable": false + "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", - "privilege": "USAGE", - "grantable": false + "privileges": [ + { + "privilege": "SELECT", + "grantable": false + }, + { + "privilege": "UPDATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": false }, { - "grantee": "anon", - "privilege": "SELECT", - "grantable": 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 }, { - "grantee": "anon", - "privilege": "UPDATE", - "grantable": false + "in_schema": "auth", + "objtype": "f", + "grantee": "postgres", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { - "grantee": "anon", - "privilege": "USAGE", - "grantable": false + "in_schema": "auth", + "objtype": "f", + "grantee": "dashboard_user", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": false }, { - "grantee": "authenticated", - "privilege": "SELECT", - "grantable": 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 }, { - "grantee": "authenticated", - "privilege": "UPDATE", - "grantable": 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": [ { - "grantee": "authenticated", - "privilege": "USAGE", - "grantable": false + "in_schema": null, + "objtype": "S", + "grantee": "supabase_etl_admin", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "service_role", - "privilege": "SELECT", - "grantable": false + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "service_role", - "privilege": "UPDATE", - "grantable": false + "in_schema": null, + "objtype": "T", + "grantee": "supabase_etl_admin", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "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": [] + "in_schema": null, + "objtype": "f", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "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": [] + "in_schema": null, + "objtype": "f", + "grantee": "supabase_etl_admin", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "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": [] + "in_schema": null, + "objtype": "n", + "grantee": "supabase_etl_admin", + "privileges": [ + { + "privilege": "CREATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "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" + "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 + } ], - "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 + "is_implicit": true } ], - "privileges": [ + "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": [ { - "grantee": "postgres", - "privilege": "DELETE", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "S", + "grantee": "supabase_read_only_user", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "INSERT", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "T", + "grantee": "supabase_read_only_user", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "f", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "SELECT", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "f", + "grantee": "supabase_read_only_user", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "n", + "grantee": "supabase_read_only_user", + "privileges": [ + { + "privilege": "CREATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null + "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 }, { - "grantee": "postgres", - "privilege": "UPDATE", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "supabase_auth_admin", - "privilege": "DELETE", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "T", + "grantee": "supabase_realtime_admin", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "supabase_auth_admin", - "privilege": "INSERT", - "grantable": false, - "columns": null + "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 }, { - "grantee": "supabase_auth_admin", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null - }, + "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": [ { - "grantee": "supabase_auth_admin", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "S", + "grantee": "supabase_replication_admin", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "supabase_auth_admin", - "privilege": "SELECT", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "supabase_auth_admin", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "T", + "grantee": "supabase_replication_admin", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "supabase_auth_admin", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "f", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "supabase_auth_admin", - "privilege": "UPDATE", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "f", + "grantee": "supabase_replication_admin", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "dashboard_user", - "privilege": "DELETE", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "n", + "grantee": "supabase_replication_admin", + "privileges": [ + { + "privilege": "CREATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "dashboard_user", - "privilege": "INSERT", - "grantable": false, - "columns": null + "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 }, { - "grantee": "dashboard_user", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "dashboard_user", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "T", + "grantee": "supabase_storage_admin", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "dashboard_user", - "privilege": "SELECT", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "f", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "dashboard_user", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "f", + "grantee": "supabase_storage_admin", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "dashboard_user", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "n", + "grantee": "supabase_storage_admin", + "privileges": [ + { + "privilege": "CREATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "dashboard_user", - "privilege": "UPDATE", - "grantable": false, - "columns": null + "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": [] }, - "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": [ + "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": [ { - "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": [] + "member": "supabase_etl_admin", + "grantor": "supabase_admin", + "admin_option": false, + "inherit_option": true, + "set_option": true }, { - "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": [] - }, + "member": "postgres", + "grantor": "supabase_admin", + "admin_option": false, + "inherit_option": true, + "set_option": true + } + ], + "default_privileges": [ { - "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": [] + "in_schema": null, + "objtype": "S", + "grantee": "supabase_superuser", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "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": [] + "in_schema": null, + "objtype": "T", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "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" + "in_schema": null, + "objtype": "T", + "grantee": "supabase_superuser", + "privileges": [ + { + "privilege": "USAGE", + "grantable": false + } ], - "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": [ + "is_implicit": true + }, { - "grantee": "postgres", - "privilege": "DELETE", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "f", + "grantee": "PUBLIC", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "INSERT", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "f", + "grantee": "supabase_superuser", + "privileges": [ + { + "privilege": "EXECUTE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null + "in_schema": null, + "objtype": "n", + "grantee": "supabase_superuser", + "privileges": [ + { + "privilege": "CREATE", + "grantable": false + }, + { + "privilege": "USAGE", + "grantable": false + } + ], + "is_implicit": true }, { - "grantee": "postgres", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "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": "postgres", - "privilege": "SELECT", - "grantable": false, - "columns": null + "grantee": "supabase_admin", + "privilege": "USAGE", + "grantable": false }, { "grantee": "postgres", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "privilege": "USAGE", + "grantable": false }, { - "grantee": "postgres", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null + "grantee": "anon", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "postgres", - "privilege": "UPDATE", - "grantable": false, - "columns": null + "grantee": "authenticated", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "DELETE", - "grantable": false, - "columns": null + "grantee": "service_role", + "privilege": "USAGE", + "grantable": false }, { "grantee": "supabase_auth_admin", - "privilege": "INSERT", - "grantable": false, - "columns": null + "privilege": "CREATE", + "grantable": false }, { "grantee": "supabase_auth_admin", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "grantee": "dashboard_user", + "privilege": "CREATE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "SELECT", - "grantable": false, - "columns": null + "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": "supabase_auth_admin", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "grantee": "postgres", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null + "grantee": "anon", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "UPDATE", - "grantable": false, - "columns": null + "grantee": "authenticated", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "DELETE", - "grantable": false, - "columns": null + "grantee": "service_role", + "privilege": "USAGE", + "grantable": false }, { "grantee": "dashboard_user", - "privilege": "INSERT", - "grantable": false, - "columns": null + "privilege": "CREATE", + "grantable": false }, { "grantee": "dashboard_user", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null + "privilege": "USAGE", + "grantable": false + } + ], + "security_labels": [] + }, + "schema:graphql": { + "name": "graphql", + "owner": "supabase_admin", + "comment": null, + "privileges": [ + { + "grantee": "supabase_admin", + "privilege": "CREATE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "grantee": "supabase_admin", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "SELECT", - "grantable": false, - "columns": null + "grantee": "postgres", + "privilege": "USAGE", + "grantable": true }, { - "grantee": "dashboard_user", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "grantee": "anon", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null + "grantee": "authenticated", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "UPDATE", - "grantable": false, - "columns": null + "grantee": "service_role", + "privilege": "USAGE", + "grantable": false } ], "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": [] - }, + "schema:graphql_public": { + "name": "graphql_public", + "owner": "supabase_admin", + "comment": null, + "privileges": [ { - "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": [] + "grantee": "supabase_admin", + "privilege": "CREATE", + "grantable": false }, { - "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": [] + "grantee": "supabase_admin", + "privilege": "USAGE", + "grantable": false }, { - "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": [] + "grantee": "postgres", + "privilege": "USAGE", + "grantable": true }, { - "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": [] + "grantee": "anon", + "privilege": "USAGE", + "grantable": false }, { - "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": [] + "grantee": "authenticated", + "privilege": "USAGE", + "grantable": false }, { - "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": [] + "grantee": "service_role", + "privilege": "USAGE", + "grantable": false } ], - "constraints": [ + "security_labels": [] + }, + "schema:pgbouncer": { + "name": "pgbouncer", + "owner": "pgbouncer", + "comment": null, + "privileges": [ { - "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 + "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": "postgres", - "privilege": "DELETE", - "grantable": false, - "columns": null + "grantee": "PUBLIC", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "postgres", - "privilege": "INSERT", - "grantable": false, - "columns": null + "grantee": "pg_database_owner", + "privilege": "CREATE", + "grantable": false }, { - "grantee": "postgres", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null + "grantee": "pg_database_owner", + "privilege": "USAGE", + "grantable": false }, { "grantee": "postgres", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "privilege": "USAGE", + "grantable": false }, { - "grantee": "postgres", - "privilege": "SELECT", - "grantable": false, - "columns": null + "grantee": "anon", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "postgres", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "grantee": "authenticated", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "postgres", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null - }, + "grantee": "service_role", + "privilege": "USAGE", + "grantable": false + } + ], + "security_labels": [] + }, + "schema:realtime": { + "name": "realtime", + "owner": "supabase_admin", + "comment": null, + "privileges": [ { - "grantee": "postgres", - "privilege": "UPDATE", - "grantable": false, - "columns": null + "grantee": "supabase_admin", + "privilege": "CREATE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "DELETE", - "grantable": false, - "columns": null + "grantee": "supabase_admin", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "INSERT", - "grantable": false, - "columns": null + "grantee": "postgres", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null + "grantee": "anon", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "grantee": "authenticated", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "SELECT", - "grantable": false, - "columns": null + "grantee": "service_role", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "grantee": "supabase_realtime_admin", + "privilege": "CREATE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null - }, + "grantee": "supabase_realtime_admin", + "privilege": "USAGE", + "grantable": false + } + ], + "security_labels": [] + }, + "schema:storage": { + "name": "storage", + "owner": "supabase_admin", + "comment": null, + "privileges": [ { - "grantee": "supabase_auth_admin", - "privilege": "UPDATE", - "grantable": false, - "columns": null + "grantee": "supabase_admin", + "privilege": "CREATE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "DELETE", - "grantable": false, - "columns": null + "grantee": "supabase_admin", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "INSERT", - "grantable": false, - "columns": null + "grantee": "postgres", + "privilege": "USAGE", + "grantable": true }, { - "grantee": "dashboard_user", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null + "grantee": "anon", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "grantee": "authenticated", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "SELECT", - "grantable": false, - "columns": null + "grantee": "service_role", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "dashboard_user", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "grantee": "supabase_storage_admin", + "privilege": "CREATE", + "grantable": true }, { - "grantee": "dashboard_user", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null + "grantee": "supabase_storage_admin", + "privilege": "USAGE", + "grantable": true }, { "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 + "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_auth_admin", - "privilege": "DELETE", - "grantable": false, - "columns": null + "grantee": "supabase_admin", + "privilege": "CREATE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "INSERT", - "grantable": false, - "columns": null + "grantee": "supabase_admin", + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", - "privilege": "MAINTAIN", - "grantable": false, - "columns": null + "grantee": "postgres", + "privilege": "USAGE", + "grantable": true }, { - "grantee": "supabase_auth_admin", - "privilege": "REFERENCES", - "grantable": false, - "columns": null + "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, - "columns": null + "grantable": false }, { "grantee": "supabase_auth_admin", - "privilege": "TRIGGER", - "grantable": false, - "columns": null + "privilege": "UPDATE", + "grantable": false }, { "grantee": "supabase_auth_admin", - "privilege": "TRUNCATE", - "grantable": false, - "columns": null + "privilege": "USAGE", + "grantable": false }, { - "grantee": "supabase_auth_admin", + "grantee": "dashboard_user", + "privilege": "SELECT", + "grantable": false + }, + { + "grantee": "dashboard_user", "privilege": "UPDATE", - "grantable": false, - "columns": null + "grantable": false + }, + { + "grantee": "dashboard_user", + "privilege": "USAGE", + "grantable": false } ], + "owner": "supabase_auth_admin", "security_labels": [] }, - "table:auth.users": { - "schema": "auth", - "name": "users", + "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", - "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": [] - }, + "owned_by_schema": "public", + "owned_by_table": "test_tenant", + "owned_by_column": "id", + "comment": null, + "privileges": [ { - "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": [] + "grantee": "supabase_admin", + "privilege": "SELECT", + "grantable": false }, { - "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": [] + "grantee": "supabase_admin", + "privilege": "UPDATE", + "grantable": false }, { - "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": [] + "grantee": "supabase_admin", + "privilege": "USAGE", + "grantable": false }, { - "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": [] + "grantee": "postgres", + "privilege": "SELECT", + "grantable": false }, { - "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": [] + "grantee": "postgres", + "privilege": "UPDATE", + "grantable": false }, { - "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": [] + "grantee": "postgres", + "privilege": "USAGE", + "grantable": false }, { - "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": [] + "grantee": "anon", + "privilege": "SELECT", + "grantable": false }, { - "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": [] + "grantee": "anon", + "privilege": "UPDATE", + "grantable": false }, { - "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": [] + "grantee": "anon", + "privilege": "USAGE", + "grantable": false }, { - "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": [] + "grantee": "authenticated", + "privilege": "SELECT", + "grantable": false }, { - "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": [] + "grantee": "authenticated", + "privilege": "UPDATE", + "grantable": false }, { - "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": [] + "grantee": "authenticated", + "privilege": "USAGE", + "grantable": false }, { - "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": [] + "grantee": "service_role", + "privilege": "SELECT", + "grantable": false }, { - "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": [] + "grantee": "service_role", + "privilege": "UPDATE", + "grantable": false }, { - "name": "raw_user_meta_data", - "position": 18, - "data_type": "jsonb", - "data_type_str": "jsonb", + "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, @@ -8839,16 +7047,16 @@ "security_labels": [] }, { - "name": "is_super_admin", - "position": 19, - "data_type": "boolean", - "data_type_str": "boolean", + "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": false, + "not_null": true, "is_identity": false, "is_identity_always": false, "is_generated": false, @@ -8858,10 +7066,10 @@ "security_labels": [] }, { - "name": "created_at", - "position": 20, - "data_type": "timestamp with time zone", - "data_type_str": "timestamp with time zone", + "name": "payload", + "position": 3, + "data_type": "json", + "data_type_str": "json", "is_custom_type": false, "custom_type_type": null, "custom_type_category": null, @@ -8877,8 +7085,8 @@ "security_labels": [] }, { - "name": "updated_at", - "position": 21, + "name": "created_at", + "position": 4, "data_type": "timestamp with time zone", "data_type_str": "timestamp with time zone", "is_custom_type": false, @@ -8898,40 +7106,7 @@ ], "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", + "name": "audit_log_entries_pkey", "constraint_type": "p", "deferrable": false, "initially_deferred": false, @@ -9112,9 +7287,9 @@ ], "security_labels": [] }, - "table:public.test_tenant": { - "schema": "public", - "name": "test_tenant", + "table:auth.instances": { + "schema": "auth", + "name": "instances", "persistence": "p", "row_security": false, "force_row_security": false, @@ -9129,16 +7304,16 @@ "options": null, "partition_bound": null, "partition_by": null, - "owner": "supabase_admin", - "comment": 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": "integer", - "data_type_str": "integer", + "data_type": "uuid", + "data_type_str": "uuid", "is_custom_type": false, "custom_type_type": null, "custom_type_category": null, @@ -9149,13 +7324,32 @@ "is_identity_always": false, "is_generated": false, "collation": null, - "default": "nextval('public.test_tenant_id_seq'::regclass)", + "default": null, "comment": null, "security_labels": [] }, { - "name": "details", + "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, @@ -9171,11 +7365,49 @@ "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": "test_tenant_pkey", + "name": "instances_pkey", "constraint_type": "p", "deferrable": false, "initially_deferred": false, @@ -9203,60 +7435,12 @@ "on_delete": null, "match_type": null, "check_expression": null, - "owner": "supabase_admin", + "owner": "supabase_auth_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", @@ -9306,145 +7490,97 @@ "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", + "grantee": "supabase_auth_admin", "privilege": "DELETE", "grantable": false, "columns": null }, { - "grantee": "authenticated", + "grantee": "supabase_auth_admin", "privilege": "INSERT", "grantable": false, "columns": null }, { - "grantee": "authenticated", + "grantee": "supabase_auth_admin", "privilege": "MAINTAIN", "grantable": false, "columns": null }, { - "grantee": "authenticated", + "grantee": "supabase_auth_admin", "privilege": "REFERENCES", "grantable": false, "columns": null }, { - "grantee": "authenticated", + "grantee": "supabase_auth_admin", "privilege": "SELECT", "grantable": false, "columns": null }, { - "grantee": "authenticated", + "grantee": "supabase_auth_admin", "privilege": "TRIGGER", "grantable": false, "columns": null }, { - "grantee": "authenticated", + "grantee": "supabase_auth_admin", "privilege": "TRUNCATE", "grantable": false, "columns": null }, { - "grantee": "authenticated", + "grantee": "supabase_auth_admin", "privilege": "UPDATE", "grantable": false, "columns": null }, { - "grantee": "service_role", + "grantee": "dashboard_user", "privilege": "DELETE", "grantable": false, "columns": null }, { - "grantee": "service_role", + "grantee": "dashboard_user", "privilege": "INSERT", "grantable": false, "columns": null }, { - "grantee": "service_role", + "grantee": "dashboard_user", "privilege": "MAINTAIN", "grantable": false, "columns": null }, { - "grantee": "service_role", + "grantee": "dashboard_user", "privilege": "REFERENCES", "grantable": false, "columns": null }, { - "grantee": "service_role", + "grantee": "dashboard_user", "privilege": "SELECT", "grantable": false, "columns": null }, { - "grantee": "service_role", + "grantee": "dashboard_user", "privilege": "TRIGGER", "grantable": false, "columns": null }, { - "grantee": "service_role", + "grantee": "dashboard_user", "privilege": "TRUNCATE", "grantable": false, "columns": null }, { - "grantee": "service_role", + "grantee": "dashboard_user", "privilege": "UPDATE", "grantable": false, "columns": null @@ -9452,39 +7588,39 @@ ], "security_labels": [] }, - "table:realtime.messages": { - "schema": "realtime", - "name": "messages", + "table:auth.refresh_tokens": { + "schema": "auth", + "name": "refresh_tokens", "persistence": "p", - "row_security": true, + "row_security": false, "force_row_security": false, "has_indexes": true, "has_rules": false, "has_triggers": false, - "has_subclasses": true, + "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, + "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": "topic", + "name": "instance_id", "position": 1, - "data_type": "text", - "data_type_str": "text", + "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, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, @@ -9494,10 +7630,10 @@ "security_labels": [] }, { - "name": "extension", + "name": "id", "position": 2, - "data_type": "text", - "data_type_str": "text", + "data_type": "bigint", + "data_type_str": "bigint", "is_custom_type": false, "custom_type_type": null, "custom_type_category": null, @@ -9508,15 +7644,15 @@ "is_identity_always": false, "is_generated": false, "collation": null, - "default": null, + "default": "nextval('auth.refresh_tokens_id_seq'::regclass)", "comment": null, "security_labels": [] }, { - "name": "payload", + "name": "token", "position": 3, - "data_type": "jsonb", - "data_type_str": "jsonb", + "data_type": "character varying", + "data_type_str": "character varying(255)", "is_custom_type": false, "custom_type_type": null, "custom_type_category": null, @@ -9532,10 +7668,10 @@ "security_labels": [] }, { - "name": "event", + "name": "user_id", "position": 4, - "data_type": "text", - "data_type_str": "text", + "data_type": "character varying", + "data_type_str": "character varying(255)", "is_custom_type": false, "custom_type_type": null, "custom_type_category": null, @@ -9551,7 +7687,7 @@ "security_labels": [] }, { - "name": "private", + "name": "revoked", "position": 5, "data_type": "boolean", "data_type_str": "boolean", @@ -9565,71 +7701,52 @@ "is_identity_always": false, "is_generated": false, "collation": null, - "default": "false", + "default": null, "comment": null, "security_labels": [] }, { - "name": "updated_at", + "name": "created_at", "position": 6, - "data_type": "timestamp without time zone", - "data_type_str": "timestamp without time zone", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, "collation": null, - "default": "now()", + "default": null, "comment": null, "security_labels": [] }, { - "name": "inserted_at", + "name": "updated_at", "position": 7, - "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": 8, - "data_type": "uuid", - "data_type_str": "uuid", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, "collation": null, - "default": "gen_random_uuid()", + "default": null, "comment": null, "security_labels": [] } ], "constraints": [ { - "name": "messages_pkey", + "name": "refresh_tokens_pkey", "constraint_type": "p", "deferrable": false, "initially_deferred": false, @@ -9643,8 +7760,7 @@ "parent_table_schema": null, "parent_table_name": null, "key_columns": [ - "id", - "inserted_at" + "id" ], "foreign_key_columns": null, "foreign_key_table": null, @@ -9658,128 +7774,281 @@ "on_delete": null, "match_type": null, "check_expression": null, - "owner": "supabase_realtime_admin", - "definition": "PRIMARY KEY (id, inserted_at)", + "owner": "supabase_auth_admin", + "definition": "PRIMARY KEY (id)", "comment": null } ], "privileges": [ { "grantee": "postgres", - "privilege": "INSERT", + "privilege": "DELETE", "grantable": false, "columns": null }, { "grantee": "postgres", - "privilege": "SELECT", + "privilege": "INSERT", "grantable": false, "columns": null }, { "grantee": "postgres", - "privilege": "UPDATE", + "privilege": "MAINTAIN", "grantable": false, "columns": null }, { - "grantee": "anon", - "privilege": "INSERT", + "grantee": "postgres", + "privilege": "REFERENCES", "grantable": false, "columns": null }, { - "grantee": "anon", + "grantee": "postgres", "privilege": "SELECT", "grantable": false, "columns": null }, { - "grantee": "anon", + "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": "authenticated", + "grantee": "supabase_auth_admin", + "privilege": "DELETE", + "grantable": false, + "columns": null + }, + { + "grantee": "supabase_auth_admin", "privilege": "INSERT", "grantable": false, "columns": null }, { - "grantee": "authenticated", + "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": "authenticated", + "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": "service_role", + "grantee": "dashboard_user", + "privilege": "DELETE", + "grantable": false, + "columns": null + }, + { + "grantee": "dashboard_user", "privilege": "INSERT", "grantable": false, "columns": null }, { - "grantee": "service_role", + "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": "service_role", - "privilege": "UPDATE", + "grantee": "dashboard_user", + "privilege": "TRIGGER", + "grantable": false, + "columns": null + }, + { + "grantee": "dashboard_user", + "privilege": "TRUNCATE", "grantable": false, "columns": null }, { - "grantee": "supabase_realtime_admin", + "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_realtime_admin", + "grantee": "supabase_auth_admin", "privilege": "INSERT", "grantable": false, "columns": null }, { - "grantee": "supabase_realtime_admin", + "grantee": "supabase_auth_admin", "privilege": "MAINTAIN", "grantable": false, "columns": null }, { - "grantee": "supabase_realtime_admin", + "grantee": "supabase_auth_admin", "privilege": "REFERENCES", "grantable": false, "columns": null }, { - "grantee": "supabase_realtime_admin", + "grantee": "supabase_auth_admin", "privilege": "SELECT", "grantable": false, "columns": null }, { - "grantee": "supabase_realtime_admin", + "grantee": "supabase_auth_admin", "privilege": "TRIGGER", "grantable": false, "columns": null }, { - "grantee": "supabase_realtime_admin", + "grantee": "supabase_auth_admin", "privilege": "TRUNCATE", "grantable": false, "columns": null }, { - "grantee": "supabase_realtime_admin", + "grantee": "supabase_auth_admin", "privilege": "UPDATE", "grantable": false, "columns": null @@ -9787,9 +8056,9 @@ ], "security_labels": [] }, - "table:realtime.messages_2026_05_12": { - "schema": "realtime", - "name": "messages_2026_05_12", + "table:auth.users": { + "schema": "auth", + "name": "users", "persistence": "p", "row_security": false, "force_row_security": false, @@ -9800,26 +8069,26 @@ "is_populated": true, "replica_identity": "d", "replica_identity_index": null, - "is_partition": true, + "is_partition": false, "options": null, - "partition_bound": "FOR VALUES FROM ('2026-05-12 00:00:00') TO ('2026-05-13 00:00:00')", + "partition_bound": null, "partition_by": null, - "owner": "supabase_admin", - "comment": null, - "parent_schema": "realtime", - "parent_name": "messages", + "owner": "supabase_auth_admin", + "comment": "Auth: Stores user login data within a secure schema.", + "parent_schema": null, + "parent_name": null, "columns": [ { - "name": "topic", + "name": "instance_id", "position": 1, - "data_type": "text", - "data_type_str": "text", + "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, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, @@ -9829,10 +8098,10 @@ "security_labels": [] }, { - "name": "extension", + "name": "id", "position": 2, - "data_type": "text", - "data_type_str": "text", + "data_type": "uuid", + "data_type_str": "uuid", "is_custom_type": false, "custom_type_type": null, "custom_type_category": null, @@ -9848,10 +8117,10 @@ "security_labels": [] }, { - "name": "payload", + "name": "aud", "position": 3, - "data_type": "jsonb", - "data_type_str": "jsonb", + "data_type": "character varying", + "data_type_str": "character varying(255)", "is_custom_type": false, "custom_type_type": null, "custom_type_category": null, @@ -9867,10 +8136,10 @@ "security_labels": [] }, { - "name": "event", + "name": "role", "position": 4, - "data_type": "text", - "data_type_str": "text", + "data_type": "character varying", + "data_type_str": "character varying(255)", "is_custom_type": false, "custom_type_type": null, "custom_type_category": null, @@ -9886,10 +8155,10 @@ "security_labels": [] }, { - "name": "private", + "name": "email", "position": 5, - "data_type": "boolean", - "data_type_str": "boolean", + "data_type": "character varying", + "data_type_str": "character varying(255)", "is_custom_type": false, "custom_type_type": null, "custom_type_category": null, @@ -9898,191 +8167,23 @@ "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": 6, - "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": 7, - "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": 8, - "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_2026_05_12_pkey", - "constraint_type": "p", - "deferrable": false, - "initially_deferred": false, - "validated": true, - "is_local": false, - "no_inherit": false, - "is_temporal": false, - "is_partition_clone": true, - "parent_constraint_schema": "realtime", - "parent_constraint_name": "messages_pkey", - "parent_table_schema": "realtime", - "parent_table_name": "messages", - "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_admin", - "definition": "PRIMARY KEY (id, inserted_at)", - "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 - } - ], - "security_labels": [] - }, - "table:realtime.messages_2026_05_13": { - "schema": "realtime", - "name": "messages_2026_05_13", - "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": true, - "options": null, - "partition_bound": "FOR VALUES FROM ('2026-05-13 00:00:00') TO ('2026-05-14 00:00:00')", - "partition_by": null, - "owner": "supabase_admin", - "comment": null, - "parent_schema": "realtime", - "parent_name": "messages", - "columns": [ + "is_generated": false, + "collation": null, + "default": null, + "comment": null, + "security_labels": [] + }, { - "name": "topic", - "position": 1, - "data_type": "text", - "data_type_str": "text", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, @@ -10092,16 +8193,16 @@ "security_labels": [] }, { - "name": "extension", - "position": 2, - "data_type": "text", - "data_type_str": "text", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, @@ -10111,10 +8212,10 @@ "security_labels": [] }, { - "name": "payload", - "position": 3, - "data_type": "jsonb", - "data_type_str": "jsonb", + "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, @@ -10130,10 +8231,10 @@ "security_labels": [] }, { - "name": "event", - "position": 4, - "data_type": "text", - "data_type_str": "text", + "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, @@ -10149,10 +8250,10 @@ "security_labels": [] }, { - "name": "private", - "position": 5, - "data_type": "boolean", - "data_type_str": "boolean", + "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, @@ -10163,189 +8264,78 @@ "is_identity_always": false, "is_generated": false, "collation": null, - "default": "false", + "default": null, "comment": null, "security_labels": [] }, { - "name": "updated_at", - "position": 6, - "data_type": "timestamp without time zone", - "data_type_str": "timestamp without time zone", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, "collation": null, - "default": "now()", + "default": null, "comment": null, "security_labels": [] }, { - "name": "inserted_at", - "position": 7, - "data_type": "timestamp without time zone", - "data_type_str": "timestamp without time zone", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, "collation": null, - "default": "now()", + "default": null, "comment": null, "security_labels": [] }, { - "name": "id", - "position": 8, - "data_type": "uuid", - "data_type_str": "uuid", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, "collation": null, - "default": "gen_random_uuid()", + "default": null, "comment": null, "security_labels": [] - } - ], - "constraints": [ - { - "name": "messages_2026_05_13_pkey", - "constraint_type": "p", - "deferrable": false, - "initially_deferred": false, - "validated": true, - "is_local": false, - "no_inherit": false, - "is_temporal": false, - "is_partition_clone": true, - "parent_constraint_schema": "realtime", - "parent_constraint_name": "messages_pkey", - "parent_table_schema": "realtime", - "parent_table_name": "messages", - "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_admin", - "definition": "PRIMARY KEY (id, inserted_at)", - "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 - } - ], - "security_labels": [] - }, - "table:realtime.messages_2026_05_14": { - "schema": "realtime", - "name": "messages_2026_05_14", - "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": true, - "options": null, - "partition_bound": "FOR VALUES FROM ('2026-05-14 00:00:00') TO ('2026-05-15 00:00:00')", - "partition_by": null, - "owner": "supabase_admin", - "comment": null, - "parent_schema": "realtime", - "parent_name": "messages", - "columns": [ - { - "name": "topic", - "position": 1, - "data_type": "text", - "data_type_str": "text", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, @@ -10355,16 +8345,16 @@ "security_labels": [] }, { - "name": "extension", - "position": 2, - "data_type": "text", - "data_type_str": "text", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, @@ -10374,10 +8364,10 @@ "security_labels": [] }, { - "name": "payload", - "position": 3, - "data_type": "jsonb", - "data_type_str": "jsonb", + "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, @@ -10393,10 +8383,10 @@ "security_labels": [] }, { - "name": "event", - "position": 4, - "data_type": "text", - "data_type_str": "text", + "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, @@ -10412,10 +8402,10 @@ "security_labels": [] }, { - "name": "private", - "position": 5, - "data_type": "boolean", - "data_type_str": "boolean", + "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, @@ -10426,86 +8416,118 @@ "is_identity_always": false, "is_generated": false, "collation": null, - "default": "false", + "default": null, "comment": null, "security_labels": [] }, { - "name": "updated_at", - "position": 6, - "data_type": "timestamp without time zone", - "data_type_str": "timestamp without time zone", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, "collation": null, - "default": "now()", + "default": null, "comment": null, "security_labels": [] }, { - "name": "inserted_at", - "position": 7, - "data_type": "timestamp without time zone", - "data_type_str": "timestamp without time zone", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, "collation": null, - "default": "now()", + "default": null, "comment": null, "security_labels": [] }, { - "name": "id", - "position": 8, - "data_type": "uuid", - "data_type_str": "uuid", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, "collation": null, - "default": "gen_random_uuid()", + "default": null, "comment": null, "security_labels": [] } ], "constraints": [ { - "name": "messages_2026_05_14_pkey", + "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": false, - "no_inherit": false, + "is_local": true, + "no_inherit": true, "is_temporal": false, - "is_partition_clone": true, - "parent_constraint_schema": "realtime", - "parent_constraint_name": "messages_pkey", - "parent_table_schema": "realtime", - "parent_table_name": "messages", + "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" + "id" ], "foreign_key_columns": null, "foreign_key_table": null, @@ -10519,204 +8541,186 @@ "on_delete": null, "match_type": null, "check_expression": null, - "owner": "supabase_admin", - "definition": "PRIMARY KEY (id, inserted_at)", + "owner": "supabase_auth_admin", + "definition": "PRIMARY KEY (id)", "comment": null } ], "privileges": [ { - "grantee": "supabase_admin", + "grantee": "postgres", "privilege": "DELETE", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "postgres", "privilege": "INSERT", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "postgres", "privilege": "MAINTAIN", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "postgres", "privilege": "REFERENCES", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "postgres", "privilege": "SELECT", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "postgres", "privilege": "TRIGGER", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "postgres", "privilege": "TRUNCATE", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "postgres", "privilege": "UPDATE", "grantable": false, "columns": null - } - ], - "security_labels": [] - }, - "table:realtime.messages_2026_05_15": { - "schema": "realtime", - "name": "messages_2026_05_15", - "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": true, - "options": null, - "partition_bound": "FOR VALUES FROM ('2026-05-15 00:00:00') TO ('2026-05-16 00:00:00')", - "partition_by": null, - "owner": "supabase_admin", - "comment": null, - "parent_schema": "realtime", - "parent_name": "messages", - "columns": [ + }, { - "name": "topic", - "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": true, - "is_identity": false, - "is_identity_always": false, - "is_generated": false, - "collation": null, - "default": null, - "comment": null, - "security_labels": [] + "grantee": "supabase_auth_admin", + "privilege": "DELETE", + "grantable": false, + "columns": null }, { - "name": "extension", - "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": true, - "is_identity": false, - "is_identity_always": false, - "is_generated": false, - "collation": null, - "default": null, - "comment": null, - "security_labels": [] + "grantee": "supabase_auth_admin", + "privilege": "INSERT", + "grantable": false, + "columns": null }, { - "name": "payload", - "position": 3, - "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": [] + "grantee": "supabase_auth_admin", + "privilege": "MAINTAIN", + "grantable": false, + "columns": null }, { - "name": "event", - "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, - "security_labels": [] + "grantee": "supabase_auth_admin", + "privilege": "REFERENCES", + "grantable": false, + "columns": null }, { - "name": "private", - "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": "false", - "comment": null, - "security_labels": [] + "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 }, { - "name": "updated_at", - "position": 6, - "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": [] + "grantee": "dashboard_user", + "privilege": "TRUNCATE", + "grantable": false, + "columns": null }, { - "name": "inserted_at", - "position": 7, - "data_type": "timestamp without time zone", - "data_type_str": "timestamp without time zone", + "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, @@ -10727,48 +8731,47 @@ "is_identity_always": false, "is_generated": false, "collation": null, - "default": "now()", + "default": "nextval('public.test_tenant_id_seq'::regclass)", "comment": null, "security_labels": [] }, { - "name": "id", - "position": 8, - "data_type": "uuid", - "data_type_str": "uuid", + "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": true, + "not_null": false, "is_identity": false, "is_identity_always": false, "is_generated": false, "collation": null, - "default": "gen_random_uuid()", + "default": null, "comment": null, "security_labels": [] } ], "constraints": [ { - "name": "messages_2026_05_15_pkey", + "name": "test_tenant_pkey", "constraint_type": "p", "deferrable": false, "initially_deferred": false, "validated": true, - "is_local": false, - "no_inherit": false, + "is_local": true, + "no_inherit": true, "is_temporal": false, - "is_partition_clone": true, - "parent_constraint_schema": "realtime", - "parent_constraint_name": "messages_pkey", - "parent_table_schema": "realtime", - "parent_table_name": "messages", + "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" + "id" ], "foreign_key_columns": null, "foreign_key_table": null, @@ -10783,55 +8786,247 @@ "match_type": null, "check_expression": null, "owner": "supabase_admin", - "definition": "PRIMARY KEY (id, inserted_at)", + "definition": "PRIMARY KEY (id)", "comment": null } ], "privileges": [ { - "grantee": "supabase_admin", + "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": "supabase_admin", + "grantee": "service_role", "privilege": "INSERT", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "service_role", "privilege": "MAINTAIN", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "service_role", "privilege": "REFERENCES", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "service_role", "privilege": "SELECT", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "service_role", "privilege": "TRIGGER", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "service_role", "privilege": "TRUNCATE", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "service_role", "privilege": "UPDATE", "grantable": false, "columns": null @@ -10839,11 +9034,11 @@ ], "security_labels": [] }, - "table:realtime.messages_2026_05_16": { + "table:realtime.messages": { "schema": "realtime", - "name": "messages_2026_05_16", + "name": "messages", "persistence": "p", - "row_security": false, + "row_security": true, "force_row_security": false, "has_indexes": true, "has_rules": false, @@ -10852,18 +9047,18 @@ "is_populated": true, "replica_identity": "d", "replica_identity_index": null, - "is_partition": true, + "is_partition": false, "options": null, - "partition_bound": "FOR VALUES FROM ('2026-05-16 00:00:00') TO ('2026-05-17 00:00:00')", - "partition_by": null, - "owner": "supabase_admin", + "partition_bound": null, + "partition_by": "RANGE (inserted_at)", + "owner": "supabase_realtime_admin", "comment": null, - "parent_schema": "realtime", - "parent_name": "messages", + "parent_schema": null, + "parent_name": null, "columns": [ { "name": "topic", - "position": 1, + "position": 3, "data_type": "text", "data_type_str": "text", "is_custom_type": false, @@ -10882,7 +9077,7 @@ }, { "name": "extension", - "position": 2, + "position": 4, "data_type": "text", "data_type_str": "text", "is_custom_type": false, @@ -10901,7 +9096,7 @@ }, { "name": "payload", - "position": 3, + "position": 5, "data_type": "jsonb", "data_type_str": "jsonb", "is_custom_type": false, @@ -10920,7 +9115,7 @@ }, { "name": "event", - "position": 4, + "position": 6, "data_type": "text", "data_type_str": "text", "is_custom_type": false, @@ -10939,7 +9134,7 @@ }, { "name": "private", - "position": 5, + "position": 7, "data_type": "boolean", "data_type_str": "boolean", "is_custom_type": false, @@ -10958,7 +9153,7 @@ }, { "name": "updated_at", - "position": 6, + "position": 8, "data_type": "timestamp without time zone", "data_type_str": "timestamp without time zone", "is_custom_type": false, @@ -10977,7 +9172,7 @@ }, { "name": "inserted_at", - "position": 7, + "position": 9, "data_type": "timestamp without time zone", "data_type_str": "timestamp without time zone", "is_custom_type": false, @@ -10996,7 +9191,7 @@ }, { "name": "id", - "position": 8, + "position": 10, "data_type": "uuid", "data_type_str": "uuid", "is_custom_type": false, @@ -11016,19 +9211,19 @@ ], "constraints": [ { - "name": "messages_2026_05_16_pkey", + "name": "messages_pkey", "constraint_type": "p", "deferrable": false, "initially_deferred": false, "validated": true, - "is_local": false, - "no_inherit": false, + "is_local": true, + "no_inherit": true, "is_temporal": false, - "is_partition_clone": true, - "parent_constraint_schema": "realtime", - "parent_constraint_name": "messages_pkey", - "parent_table_schema": "realtime", - "parent_table_name": "messages", + "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" @@ -11045,56 +9240,128 @@ "on_delete": null, "match_type": null, "check_expression": null, - "owner": "supabase_admin", + "owner": "supabase_realtime_admin", "definition": "PRIMARY KEY (id, inserted_at)", "comment": null } ], "privileges": [ { - "grantee": "supabase_admin", + "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_admin", + "grantee": "supabase_realtime_admin", "privilege": "INSERT", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "supabase_realtime_admin", "privilege": "MAINTAIN", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "supabase_realtime_admin", "privilege": "REFERENCES", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "supabase_realtime_admin", "privilege": "SELECT", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "supabase_realtime_admin", "privilege": "TRIGGER", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "supabase_realtime_admin", "privilege": "TRUNCATE", "grantable": false, "columns": null }, { - "grantee": "supabase_admin", + "grantee": "supabase_realtime_admin", "privilege": "UPDATE", "grantable": false, "columns": null @@ -11363,6 +9630,25 @@ "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, @@ -11476,25 +9762,6 @@ "default": "'*'::text", "comment": null, "security_labels": [] - }, - { - "name": "subscription_id", - "position": 12, - "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": [] } ], "constraints": [ @@ -13694,103 +11961,53 @@ "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_2026_05_12.messages_2026_05_12_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_12.id", + "dependent_stable_id": "comment:table:auth.schema_migrations", + "referenced_stable_id": "table:auth.schema_migrations", "deptype": "a" }, { - "dependent_stable_id": "constraint:realtime.messages_2026_05_12.messages_2026_05_12_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_12.inserted_at", + "dependent_stable_id": "comment:table:auth.users", + "referenced_stable_id": "table:auth.users", "deptype": "a" }, { - "dependent_stable_id": "constraint:realtime.messages_2026_05_13.messages_2026_05_13_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_13.id", + "dependent_stable_id": "comment:table:vault.secrets", + "referenced_stable_id": "table:vault.secrets", "deptype": "a" }, { - "dependent_stable_id": "constraint:realtime.messages_2026_05_13.messages_2026_05_13_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_13.inserted_at", + "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:realtime.messages_2026_05_14.messages_2026_05_14_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_14.id", + "dependent_stable_id": "constraint:auth.instances.instances_pkey", + "referenced_stable_id": "column:auth.instances.id", "deptype": "a" }, { - "dependent_stable_id": "constraint:realtime.messages_2026_05_14.messages_2026_05_14_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_14.inserted_at", + "dependent_stable_id": "constraint:auth.refresh_tokens.refresh_tokens_pkey", + "referenced_stable_id": "column:auth.refresh_tokens.id", "deptype": "a" }, { - "dependent_stable_id": "constraint:realtime.messages_2026_05_15.messages_2026_05_15_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_15.id", + "dependent_stable_id": "constraint:auth.schema_migrations.schema_migrations_pkey", + "referenced_stable_id": "column:auth.schema_migrations.version", "deptype": "a" }, { - "dependent_stable_id": "constraint:realtime.messages_2026_05_15.messages_2026_05_15_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_15.inserted_at", + "dependent_stable_id": "constraint:auth.users.users_email_key", + "referenced_stable_id": "column:auth.users.email", "deptype": "a" }, { - "dependent_stable_id": "constraint:realtime.messages_2026_05_16.messages_2026_05_16_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_16.id", + "dependent_stable_id": "constraint:auth.users.users_pkey", + "referenced_stable_id": "column:auth.users.id", "deptype": "a" }, { - "dependent_stable_id": "constraint:realtime.messages_2026_05_16.messages_2026_05_16_pkey", - "referenced_stable_id": "column:realtime.messages_2026_05_16.inserted_at", + "dependent_stable_id": "constraint:public.test_tenant.test_tenant_pkey", + "referenced_stable_id": "column:public.test_tenant.id", "deptype": "a" }, { @@ -15223,206 +13440,6 @@ "referenced_stable_id": "table:public.test_tenant", "deptype": "n" }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_12.extension", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_12.inserted_at", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_12.private", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_12.topic", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_inserted_at_topic_idx", - "referenced_stable_id": "table:realtime.messages_2026_05_12", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_pkey", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_12.messages_2026_05_12_pkey", - "referenced_stable_id": "table:realtime.messages_2026_05_12", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_13.extension", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_13.inserted_at", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_13.private", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_13.topic", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_inserted_at_topic_idx", - "referenced_stable_id": "table:realtime.messages_2026_05_13", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_pkey", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_13.messages_2026_05_13_pkey", - "referenced_stable_id": "table:realtime.messages_2026_05_13", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_14.extension", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_14.inserted_at", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_14.private", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_14.topic", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_inserted_at_topic_idx", - "referenced_stable_id": "table:realtime.messages_2026_05_14", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_pkey", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_14.messages_2026_05_14_pkey", - "referenced_stable_id": "table:realtime.messages_2026_05_14", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_15.extension", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_15.inserted_at", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_15.private", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_15.topic", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_inserted_at_topic_idx", - "referenced_stable_id": "table:realtime.messages_2026_05_15", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_pkey", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_15.messages_2026_05_15_pkey", - "referenced_stable_id": "table:realtime.messages_2026_05_15", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_16.extension", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_16.inserted_at", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_16.private", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", - "referenced_stable_id": "column:realtime.messages_2026_05_16.topic", - "deptype": "a" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_inserted_at_topic_idx", - "referenced_stable_id": "table:realtime.messages_2026_05_16", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_pkey", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "index:realtime.messages_2026_05_16.messages_2026_05_16_pkey", - "referenced_stable_id": "table:realtime.messages_2026_05_16", - "deptype": "n" - }, { "dependent_stable_id": "index:realtime.schema_migrations.schema_migrations_pkey", "referenced_stable_id": "schema:realtime", @@ -16588,6 +14605,21 @@ "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", @@ -16691,28 +14723,13 @@ { "dependent_stable_id": "publication:supabase_realtime", "referenced_stable_id": "table:public.test_tenant", - "deptype": "a" + "deptype": "n" }, { "dependent_stable_id": "publication:supabase_realtime", "referenced_stable_id": "table:public.test_tenant", - "deptype": "n" - }, - { - "dependent_stable_id": "publication:supabase_realtime_messages_publication", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "publication:supabase_realtime_messages_publication", - "referenced_stable_id": "table:realtime.messages", "deptype": "a" }, - { - "dependent_stable_id": "publication:supabase_realtime_messages_publication", - "referenced_stable_id": "table:realtime.messages", - "deptype": "n" - }, { "dependent_stable_id": "rule:extensions.pg_stat_statements_info.\"_RETURN\"", "referenced_stable_id": "procedure:extensions.pg_stat_statements_info()", @@ -16933,81 +14950,6 @@ "referenced_stable_id": "schema:realtime", "deptype": "n" }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_12", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_12", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_12", - "referenced_stable_id": "table:realtime.messages", - "deptype": "a" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_13", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_13", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_13", - "referenced_stable_id": "table:realtime.messages", - "deptype": "a" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_14", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_14", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_14", - "referenced_stable_id": "table:realtime.messages", - "deptype": "a" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_15", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_15", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_15", - "referenced_stable_id": "table:realtime.messages", - "deptype": "a" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_16", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_16", - "referenced_stable_id": "schema:realtime", - "deptype": "n" - }, - { - "dependent_stable_id": "table:realtime.messages_2026_05_16", - "referenced_stable_id": "table:realtime.messages", - "deptype": "a" - }, { "dependent_stable_id": "table:realtime.schema_migrations", "referenced_stable_id": "role:supabase_admin", @@ -17108,31 +15050,6 @@ "referenced_stable_id": "role:supabase_realtime_admin", "deptype": "n" }, - { - "dependent_stable_id": "type:realtime._messages_2026_05_12", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "type:realtime._messages_2026_05_13", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "type:realtime._messages_2026_05_14", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "type:realtime._messages_2026_05_15", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, - { - "dependent_stable_id": "type:realtime._messages_2026_05_16", - "referenced_stable_id": "role:supabase_admin", - "deptype": "n" - }, { "dependent_stable_id": "type:realtime._schema_migrations", "referenced_stable_id": "role:supabase_admin", @@ -17224,22 +15141,22 @@ "deptype": "n" }, { - "dependent_stable_id": "unknown:pg_class.17464", + "dependent_stable_id": "unknown:pg_class.16851", "referenced_stable_id": "column:realtime.messages.extension", "deptype": "a" }, { - "dependent_stable_id": "unknown:pg_class.17464", + "dependent_stable_id": "unknown:pg_class.16851", "referenced_stable_id": "column:realtime.messages.inserted_at", "deptype": "a" }, { - "dependent_stable_id": "unknown:pg_class.17464", + "dependent_stable_id": "unknown:pg_class.16851", "referenced_stable_id": "column:realtime.messages.private", "deptype": "a" }, { - "dependent_stable_id": "unknown:pg_class.17464", + "dependent_stable_id": "unknown:pg_class.16851", "referenced_stable_id": "column:realtime.messages.topic", "deptype": "a" }, From cac9a59a4ff71d6616dc533edc4547ca583261a8 Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Thu, 14 May 2026 18:27:09 -0400 Subject: [PATCH 8/9] tests --- .../dashboard/tenant_info_test.exs | 3 +- .../dashboard/tenant_migrations_test.exs | 73 +++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 test/realtime_web/dashboard/tenant_migrations_test.exs 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 From 61b09b6d1d4cf1a9b4ae806ca662d5c87171b547 Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Mon, 18 May 2026 12:31:11 -0400 Subject: [PATCH 9/9] allow blacksmith-2vcpu-ubuntu-2404 --- .github/actionlint.yaml | 1 + 1 file changed, 1 insertion(+) 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