-- Downloaded from: https://github.com/cskerritt/lifeplan-genius/blob/52556573e9faff667ff800f8f68cf298cd2e9a31/schema_only.sql -- -- PostgreSQL database dump -- -- Dumped from database version 15.8 -- Dumped by pg_dump version 17.4 (Postgres.app) SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET transaction_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: auth; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA auth; -- -- Name: extensions; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA extensions; -- -- Name: graphql; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA graphql; -- -- Name: graphql_public; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA graphql_public; -- -- Name: pgbouncer; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA pgbouncer; -- -- Name: pgsodium; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA pgsodium; -- -- Name: pgsodium; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS pgsodium WITH SCHEMA pgsodium; -- -- Name: EXTENSION pgsodium; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION pgsodium IS 'Pgsodium is a modern cryptography library for Postgres.'; -- -- Name: realtime; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA realtime; -- -- Name: storage; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA storage; -- -- Name: supabase_migrations; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA supabase_migrations; -- -- Name: vault; Type: SCHEMA; Schema: -; Owner: - -- CREATE SCHEMA vault; -- -- Name: pg_graphql; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS pg_graphql WITH SCHEMA graphql; -- -- Name: EXTENSION pg_graphql; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION pg_graphql IS 'pg_graphql: GraphQL support'; -- -- Name: pg_stat_statements; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA extensions; -- -- Name: EXTENSION pg_stat_statements; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION pg_stat_statements IS 'track planning and execution statistics of all SQL statements executed'; -- -- Name: pg_trgm; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public; -- -- Name: EXTENSION pg_trgm; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION pg_trgm IS 'text similarity measurement and index searching based on trigrams'; -- -- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA extensions; -- -- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions'; -- -- Name: pgjwt; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS pgjwt WITH SCHEMA extensions; -- -- Name: EXTENSION pgjwt; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION pgjwt IS 'JSON Web Token API for Postgresql'; -- -- Name: supabase_vault; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS supabase_vault WITH SCHEMA vault; -- -- Name: EXTENSION supabase_vault; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION supabase_vault IS 'Supabase Vault Extension'; -- -- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: - -- CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA extensions; -- -- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner: - -- COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)'; -- -- Name: aal_level; Type: TYPE; Schema: auth; Owner: - -- CREATE TYPE auth.aal_level AS ENUM ( 'aal1', 'aal2', 'aal3' ); -- -- Name: code_challenge_method; Type: TYPE; Schema: auth; Owner: - -- CREATE TYPE auth.code_challenge_method AS ENUM ( 's256', 'plain' ); -- -- Name: factor_status; Type: TYPE; Schema: auth; Owner: - -- CREATE TYPE auth.factor_status AS ENUM ( 'unverified', 'verified' ); -- -- Name: factor_type; Type: TYPE; Schema: auth; Owner: - -- CREATE TYPE auth.factor_type AS ENUM ( 'totp', 'webauthn', 'phone' ); -- -- Name: one_time_token_type; Type: TYPE; Schema: auth; Owner: - -- CREATE TYPE auth.one_time_token_type AS ENUM ( 'confirmation_token', 'reauthentication_token', 'recovery_token', 'email_change_token_new', 'email_change_token_current', 'phone_change_token' ); -- -- Name: action; Type: TYPE; Schema: realtime; Owner: - -- CREATE TYPE realtime.action AS ENUM ( 'INSERT', 'UPDATE', 'DELETE', 'TRUNCATE', 'ERROR' ); -- -- Name: equality_op; Type: TYPE; Schema: realtime; Owner: - -- CREATE TYPE realtime.equality_op AS ENUM ( 'eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'in' ); -- -- Name: user_defined_filter; Type: TYPE; Schema: realtime; Owner: - -- CREATE TYPE realtime.user_defined_filter AS ( column_name text, op realtime.equality_op, value text ); -- -- Name: wal_column; Type: TYPE; Schema: realtime; Owner: - -- CREATE TYPE realtime.wal_column AS ( name text, type_name text, type_oid oid, value jsonb, is_pkey boolean, is_selectable boolean ); -- -- Name: wal_rls; Type: TYPE; Schema: realtime; Owner: - -- CREATE TYPE realtime.wal_rls AS ( wal jsonb, is_rls_enabled boolean, subscription_ids uuid[], errors text[] ); -- -- Name: email(); Type: FUNCTION; Schema: auth; Owner: - -- CREATE FUNCTION auth.email() RETURNS text LANGUAGE sql STABLE AS $$ select coalesce( nullif(current_setting('request.jwt.claim.email', true), ''), (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'email') )::text $$; -- -- Name: FUNCTION email(); Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON FUNCTION auth.email() IS 'Deprecated. Use auth.jwt() -> ''email'' instead.'; -- -- Name: jwt(); Type: FUNCTION; Schema: auth; Owner: - -- CREATE FUNCTION auth.jwt() RETURNS jsonb LANGUAGE sql STABLE AS $$ select coalesce( nullif(current_setting('request.jwt.claim', true), ''), nullif(current_setting('request.jwt.claims', true), '') )::jsonb $$; -- -- Name: role(); Type: FUNCTION; Schema: auth; Owner: - -- CREATE FUNCTION auth.role() RETURNS text LANGUAGE sql STABLE AS $$ select coalesce( nullif(current_setting('request.jwt.claim.role', true), ''), (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'role') )::text $$; -- -- Name: FUNCTION role(); Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON FUNCTION auth.role() IS 'Deprecated. Use auth.jwt() -> ''role'' instead.'; -- -- Name: uid(); Type: FUNCTION; Schema: auth; Owner: - -- CREATE FUNCTION auth.uid() RETURNS uuid LANGUAGE sql STABLE AS $$ select coalesce( nullif(current_setting('request.jwt.claim.sub', true), ''), (nullif(current_setting('request.jwt.claims', true), '')::jsonb ->> 'sub') )::uuid $$; -- -- Name: FUNCTION uid(); Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON FUNCTION auth.uid() IS 'Deprecated. Use auth.jwt() -> ''sub'' instead.'; -- -- Name: grant_pg_cron_access(); Type: FUNCTION; Schema: extensions; Owner: - -- CREATE FUNCTION extensions.grant_pg_cron_access() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN IF EXISTS ( SELECT FROM pg_event_trigger_ddl_commands() AS ev JOIN pg_extension AS ext ON ev.objid = ext.oid WHERE ext.extname = 'pg_cron' ) THEN grant usage on schema cron to postgres with grant option; alter default privileges in schema cron grant all on tables to postgres with grant option; alter default privileges in schema cron grant all on functions to postgres with grant option; alter default privileges in schema cron grant all on sequences to postgres with grant option; alter default privileges for user supabase_admin in schema cron grant all on sequences to postgres with grant option; alter default privileges for user supabase_admin in schema cron grant all on tables to postgres with grant option; alter default privileges for user supabase_admin in schema cron grant all on functions to postgres with grant option; grant all privileges on all tables in schema cron to postgres with grant option; revoke all on table cron.job from postgres; grant select on table cron.job to postgres with grant option; END IF; END; $$; -- -- Name: FUNCTION grant_pg_cron_access(); Type: COMMENT; Schema: extensions; Owner: - -- COMMENT ON FUNCTION extensions.grant_pg_cron_access() IS 'Grants access to pg_cron'; -- -- Name: grant_pg_graphql_access(); Type: FUNCTION; Schema: extensions; Owner: - -- CREATE FUNCTION extensions.grant_pg_graphql_access() RETURNS event_trigger LANGUAGE plpgsql AS $_$ DECLARE func_is_graphql_resolve bool; BEGIN func_is_graphql_resolve = ( SELECT n.proname = 'resolve' FROM pg_event_trigger_ddl_commands() AS ev LEFT JOIN pg_catalog.pg_proc AS n ON ev.objid = n.oid ); IF func_is_graphql_resolve THEN -- Update public wrapper to pass all arguments through to the pg_graphql resolve func DROP FUNCTION IF EXISTS graphql_public.graphql; create or replace function graphql_public.graphql( "operationName" text default null, query text default null, variables jsonb default null, extensions jsonb default null ) returns jsonb language sql as $$ select graphql.resolve( query := query, variables := coalesce(variables, '{}'), "operationName" := "operationName", extensions := extensions ); $$; -- This hook executes when `graphql.resolve` is created. That is not necessarily the last -- function in the extension so we need to grant permissions on existing entities AND -- update default permissions to any others that are created after `graphql.resolve` grant usage on schema graphql to postgres, anon, authenticated, service_role; grant select on all tables in schema graphql to postgres, anon, authenticated, service_role; grant execute on all functions in schema graphql to postgres, anon, authenticated, service_role; grant all on all sequences in schema graphql to postgres, anon, authenticated, service_role; alter default privileges in schema graphql grant all on tables to postgres, anon, authenticated, service_role; alter default privileges in schema graphql grant all on functions to postgres, anon, authenticated, service_role; alter default privileges in schema graphql grant all on sequences to postgres, anon, authenticated, service_role; -- Allow postgres role to allow granting usage on graphql and graphql_public schemas to custom roles grant usage on schema graphql_public to postgres with grant option; grant usage on schema graphql to postgres with grant option; END IF; END; $_$; -- -- Name: FUNCTION grant_pg_graphql_access(); Type: COMMENT; Schema: extensions; Owner: - -- COMMENT ON FUNCTION extensions.grant_pg_graphql_access() IS 'Grants access to pg_graphql'; -- -- Name: grant_pg_net_access(); Type: FUNCTION; Schema: extensions; Owner: - -- CREATE FUNCTION extensions.grant_pg_net_access() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN IF EXISTS ( SELECT 1 FROM pg_event_trigger_ddl_commands() AS ev JOIN pg_extension AS ext ON ev.objid = ext.oid WHERE ext.extname = 'pg_net' ) THEN IF NOT EXISTS ( SELECT 1 FROM pg_roles WHERE rolname = 'supabase_functions_admin' ) THEN CREATE USER supabase_functions_admin NOINHERIT CREATEROLE LOGIN NOREPLICATION; END IF; GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role; IF EXISTS ( SELECT FROM pg_extension WHERE extname = 'pg_net' -- all versions in use on existing projects as of 2025-02-20 -- version 0.12.0 onwards don't need these applied AND extversion IN ('0.2', '0.6', '0.7', '0.7.1', '0.8.0', '0.10.0', '0.11.0') ) THEN ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; 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; 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; END IF; END IF; END; $$; -- -- Name: FUNCTION grant_pg_net_access(); Type: COMMENT; Schema: extensions; Owner: - -- COMMENT ON FUNCTION extensions.grant_pg_net_access() IS 'Grants access to pg_net'; -- -- Name: pgrst_ddl_watch(); Type: FUNCTION; Schema: extensions; Owner: - -- CREATE FUNCTION extensions.pgrst_ddl_watch() RETURNS event_trigger LANGUAGE plpgsql AS $$ DECLARE cmd record; BEGIN FOR cmd IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP IF cmd.command_tag IN ( 'CREATE SCHEMA', 'ALTER SCHEMA' , 'CREATE TABLE', 'CREATE TABLE AS', 'SELECT INTO', 'ALTER TABLE' , 'CREATE FOREIGN TABLE', 'ALTER FOREIGN TABLE' , 'CREATE VIEW', 'ALTER VIEW' , 'CREATE MATERIALIZED VIEW', 'ALTER MATERIALIZED VIEW' , 'CREATE FUNCTION', 'ALTER FUNCTION' , 'CREATE TRIGGER' , 'CREATE TYPE', 'ALTER TYPE' , 'CREATE RULE' , 'COMMENT' ) -- don't notify in case of CREATE TEMP table or other objects created on pg_temp AND cmd.schema_name is distinct from 'pg_temp' THEN NOTIFY pgrst, 'reload schema'; END IF; END LOOP; END; $$; -- -- Name: pgrst_drop_watch(); Type: FUNCTION; Schema: extensions; Owner: - -- CREATE FUNCTION extensions.pgrst_drop_watch() RETURNS event_trigger LANGUAGE plpgsql AS $$ DECLARE obj record; BEGIN FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects() LOOP IF obj.object_type IN ( 'schema' , 'table' , 'foreign table' , 'view' , 'materialized view' , 'function' , 'trigger' , 'type' , 'rule' ) AND obj.is_temporary IS false -- no pg_temp objects THEN NOTIFY pgrst, 'reload schema'; END IF; END LOOP; END; $$; -- -- Name: set_graphql_placeholder(); Type: FUNCTION; Schema: extensions; Owner: - -- CREATE FUNCTION extensions.set_graphql_placeholder() RETURNS event_trigger LANGUAGE plpgsql AS $_$ DECLARE graphql_is_dropped bool; BEGIN graphql_is_dropped = ( SELECT ev.schema_name = 'graphql_public' FROM pg_event_trigger_dropped_objects() AS ev WHERE ev.schema_name = 'graphql_public' ); IF graphql_is_dropped THEN create or replace function graphql_public.graphql( "operationName" text default null, query text default null, variables jsonb default null, extensions jsonb default null ) returns jsonb language plpgsql as $$ DECLARE server_version float; BEGIN server_version = (SELECT (SPLIT_PART((select version()), ' ', 2))::float); IF server_version >= 14 THEN RETURN jsonb_build_object( 'errors', jsonb_build_array( jsonb_build_object( 'message', 'pg_graphql extension is not enabled.' ) ) ); ELSE RETURN jsonb_build_object( 'errors', jsonb_build_array( jsonb_build_object( 'message', 'pg_graphql is only available on projects running Postgres 14 onwards.' ) ) ); END IF; END; $$; END IF; END; $_$; -- -- Name: FUNCTION set_graphql_placeholder(); Type: COMMENT; Schema: extensions; Owner: - -- COMMENT ON FUNCTION extensions.set_graphql_placeholder() IS 'Reintroduces placeholder function for graphql_public.graphql'; -- -- Name: get_auth(text); Type: FUNCTION; Schema: pgbouncer; Owner: - -- CREATE FUNCTION pgbouncer.get_auth(p_usename text) RETURNS TABLE(username text, password text) LANGUAGE plpgsql SECURITY DEFINER AS $$ BEGIN RAISE WARNING 'PgBouncer auth request: %', p_usename; RETURN QUERY SELECT usename::TEXT, passwd::TEXT FROM pg_catalog.pg_shadow WHERE usename = p_usename; END; $$; -- -- Name: calculate_adjusted_costs(numeric, numeric, numeric); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.calculate_adjusted_costs(base_fee numeric, mfr_factor numeric, pfr_factor numeric) RETURNS TABLE(min_cost numeric, max_cost numeric, avg_cost numeric, mfr_adjusted numeric, pfr_adjusted numeric) LANGUAGE plpgsql AS $$ BEGIN -- Calculate MFR and PFR adjustments mfr_adjusted := base_fee * COALESCE(mfr_factor, 1.0); pfr_adjusted := base_fee * COALESCE(pfr_factor, 1.0); -- Calculate min (50th percentile average) min_cost := (mfr_adjusted + pfr_adjusted) / 2; -- Calculate max (75th percentile average) max_cost := (mfr_adjusted * 1.25 + pfr_adjusted * 1.25) / 2; -- Calculate average avg_cost := (min_cost + max_cost) / 2; RETURN NEXT; END; $$; -- -- Name: clean_currency(text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.clean_currency(value text) RETURNS numeric LANGUAGE plpgsql AS $_$ BEGIN -- Remove currency symbols and commas, then cast to decimal RETURN NULLIF(REGEXP_REPLACE(value, '[$,]', '', 'g'), '')::DECIMAL; EXCEPTION WHEN OTHERS THEN RETURN NULL; END; $_$; -- -- Name: clean_fee_data(jsonb); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.clean_fee_data(raw_data jsonb) RETURNS jsonb LANGUAGE plpgsql AS $$ DECLARE cleaned JSONB; BEGIN -- Remove any null or empty string fields cleaned = raw_data - '{null}'; -- Handle common CSV import issues IF jsonb_typeof(cleaned) = 'object' THEN -- Remove any trailing whitespace from text fields cleaned = jsonb_object_agg( key, CASE WHEN jsonb_typeof(value) = 'string' THEN to_jsonb(trim(value::text)) ELSE value END ) FROM jsonb_each(cleaned); -- Convert empty strings to null cleaned = jsonb_object_agg( key, CASE WHEN value::text = '""' OR value::text = '' THEN 'null'::jsonb ELSE value END ) FROM jsonb_each(cleaned); END IF; RETURN cleaned; END; $$; -- -- Name: clean_numeric(text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.clean_numeric(value text) RETURNS numeric LANGUAGE plpgsql AS $$ BEGIN -- Remove any non-numeric characters except decimal point RETURN NULLIF(REGEXP_REPLACE(value, '[^0-9.]', '', 'g'), '')::DECIMAL; EXCEPTION WHEN OTHERS THEN RETURN NULL; END; $$; -- -- Name: convert_cost_to_numeric(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.convert_cost_to_numeric() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN -- Convert cost values to numeric if they are not already NEW.min_cost := NEW.min_cost::numeric; NEW.avg_cost := NEW.avg_cost::numeric; NEW.max_cost := NEW.max_cost::numeric; NEW.annual_cost := NEW.annual_cost::numeric; NEW.lifetime_cost := NEW.lifetime_cost::numeric; RETURN NEW; END; $$; -- -- Name: format_zip(text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.format_zip(zip_code text) RETURNS text LANGUAGE plpgsql AS $$ BEGIN -- Remove any non-numeric characters and pad with leading zeros RETURN LPAD(REGEXP_REPLACE(zip_code, '[^0-9]', '', 'g'), 5, '0'); END; $$; -- -- Name: handle_decimal_values(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.handle_decimal_values() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN -- Convert cost values to numeric if they are not already NEW.min_cost := NEW.min_cost::numeric; NEW.avg_cost := NEW.avg_cost::numeric; NEW.max_cost := NEW.max_cost::numeric; NEW.annual_cost := NEW.annual_cost::numeric; NEW.lifetime_cost := NEW.lifetime_cost::numeric; RETURN NEW; END; $$; -- -- Name: import_gaf_data(text, text, text, text, text, text, text, text, text, text, text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.import_gaf_data(p_zip text, p_city text, p_state_id text, p_state_name text, p_county_fips text, p_county_name text, p_mfr_code text, p_pfr_code text, p_asa_factor text, p_conversion_50th text, p_conversion_75th text) RETURNS void LANGUAGE plpgsql AS $$ BEGIN INSERT INTO gaf_lookup ( zip, city, state_id, state_name, county_fips, county_name, mfr_code, pfr_code, asa_factor, conversion_factor_asa_50th, conversion_factor_asa_75th ) VALUES ( format_zip(p_zip), NULLIF(TRIM(p_city), ''), TRIM(p_state_id), TRIM(p_state_name), TRIM(p_county_fips), TRIM(p_county_name), clean_numeric(p_mfr_code), clean_numeric(p_pfr_code), clean_numeric(p_asa_factor), clean_numeric(p_conversion_50th), clean_numeric(p_conversion_75th) ) ON CONFLICT (zip) DO UPDATE SET city = EXCLUDED.city, state_id = EXCLUDED.state_id, state_name = EXCLUDED.state_name, county_fips = EXCLUDED.county_fips, county_name = EXCLUDED.county_name, mfr_code = EXCLUDED.mfr_code, pfr_code = EXCLUDED.pfr_code, asa_factor = EXCLUDED.asa_factor, conversion_factor_asa_50th = EXCLUDED.conversion_factor_asa_50th, conversion_factor_asa_75th = EXCLUDED.conversion_factor_asa_75th; EXCEPTION WHEN OTHERS THEN INSERT INTO gaf_import_errors (row_data, error_message) VALUES ( format( 'ZIP: %s, City: %s, State: %s, County: %s', p_zip, p_city, p_state_id, p_county_name ), SQLERRM ); END; $$; -- -- Name: pad_zip_code(anyelement); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.pad_zip_code(zip_input anyelement) RETURNS text LANGUAGE plpgsql AS $$ BEGIN -- Convert input to text and pad with zeros RETURN LPAD(zip_input::TEXT, 5, '0'); END; $$; -- -- Name: pad_zip_code(text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.pad_zip_code(zip_input text) RETURNS text LANGUAGE plpgsql AS $$ BEGIN RETURN LPAD(zip_input, 5, '0'); END; $$; -- -- Name: pad_zip_code_trigger(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.pad_zip_code_trigger() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN NEW.zip = LPAD(NEW.zip, 5, '0'); RETURN NEW; END; $$; -- -- Name: process_fee_import(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.process_fee_import() RETURNS void LANGUAGE plpgsql AS $$ DECLARE r RECORD; BEGIN -- Process each unprocessed record FOR r IN SELECT * FROM fee_imports_staging WHERE NOT processed AND error_message IS NULL LOOP BEGIN -- Clean the data r.raw_data = clean_fee_data(r.raw_data); -- Mark as processed UPDATE fee_imports_staging SET processed = true, raw_data = r.raw_data WHERE id = r.id; EXCEPTION WHEN OTHERS THEN -- Log the error INSERT INTO import_errors ( table_name, error_message, raw_data ) VALUES ( 'fee_imports_staging', SQLERRM, r.raw_data::text ); -- Mark record as errored UPDATE fee_imports_staging SET error_message = SQLERRM WHERE id = r.id; END; END LOOP; END; $$; -- -- Name: search_cpt_codes(text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.search_cpt_codes(search_term text) RETURNS TABLE(code text, description text, base_rate_50th numeric, base_rate_75th numeric) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT c.code, c.description, c.base_rate_50th, c.base_rate_75th FROM cpt_codes c WHERE c.code ILIKE '%' || search_term || '%' OR c.description ILIKE '%' || search_term || '%' ORDER BY CASE WHEN c.code ILIKE search_term || '%' THEN 0 WHEN c.code ILIKE '%' || search_term || '%' THEN 1 WHEN c.description ILIKE search_term || '%' THEN 2 ELSE 3 END, c.code LIMIT 10; END; $$; -- -- Name: search_fee_chart(text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.search_fee_chart(search_query text) RETURNS TABLE(code text, description text, fee numeric) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT f.code, f.description, f.fee FROM fee_chart f WHERE f.code ILIKE '%' || search_query || '%' OR f.description ILIKE '%' || search_query || '%' ORDER BY CASE WHEN f.code ILIKE search_query || '%' THEN 0 WHEN f.code ILIKE '%' || search_query || '%' THEN 1 WHEN f.description ILIKE search_query || '%' THEN 2 ELSE 3 END, f.code LIMIT 10; END; $$; -- -- Name: search_fee_sheet(text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.search_fee_sheet(search_term text) RETURNS TABLE(code text, description text, base_rate numeric) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT f.code, f.description, f.base_rate FROM fee_sheet f WHERE f.code ILIKE '%' || search_term || '%' OR f.description ILIKE '%' || search_term || '%' ORDER BY CASE WHEN f.code ILIKE search_term || '%' THEN 0 WHEN f.code ILIKE '%' || search_term || '%' THEN 1 WHEN f.description ILIKE search_term || '%' THEN 2 ELSE 3 END, f.code LIMIT 10; END; $$; -- -- Name: search_fee_sheet(text, text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.search_fee_sheet(search_query text, search_code_type text) RETURNS TABLE(code text, description text, base_rate numeric, code_type text) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT f.code, f.description, f.base_rate, f.code_type FROM fee_sheet f WHERE f.code_type = search_code_type AND ( f.code ILIKE '%' || search_query || '%' OR f.description ILIKE '%' || search_query || '%' ) ORDER BY CASE WHEN f.code ILIKE search_query || '%' THEN 0 WHEN f.code ILIKE '%' || search_query || '%' THEN 1 WHEN f.description ILIKE search_query || '%' THEN 2 ELSE 3 END, f.code LIMIT 10; END; $$; -- -- Name: search_geographic_factors(text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.search_geographic_factors(zip_code text) RETURNS TABLE(zip text, city text, state_name text, mfr_code numeric, pfr_code numeric) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT g.zip, g.city, g.state_name, g.mfr_code::numeric, g.pfr_code::numeric FROM gaf_lookup g WHERE g.zip = zip_code; END; $$; -- -- Name: to_numeric(anyelement); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.to_numeric(value anyelement) RETURNS numeric LANGUAGE plpgsql AS $$ BEGIN RETURN value::numeric; END; $$; -- -- Name: update_life_care_plan_totals(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.update_life_care_plan_totals() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN -- Update or insert category totals INSERT INTO life_care_plan_category_totals ( plan_id, category, annual_cost, lifetime_cost, min_cost, avg_cost, max_cost ) SELECT plan_id, category, SUM(annual_cost) as annual_cost, SUM(lifetime_cost) as lifetime_cost, SUM(min_cost) as min_cost, SUM(avg_cost) as avg_cost, SUM(max_cost) as max_cost FROM care_plan_entries WHERE plan_id = NEW.plan_id GROUP BY plan_id, category ON CONFLICT (plan_id, category) DO UPDATE SET annual_cost = EXCLUDED.annual_cost, lifetime_cost = EXCLUDED.lifetime_cost, min_cost = EXCLUDED.min_cost, avg_cost = EXCLUDED.avg_cost, max_cost = EXCLUDED.max_cost, updated_at = now(); -- Update overall totals INSERT INTO life_care_plan_totals ( plan_id, total_annual_cost, total_lifetime_cost ) SELECT plan_id, SUM(annual_cost) as total_annual_cost, SUM(lifetime_cost) as total_lifetime_cost FROM care_plan_entries WHERE plan_id = NEW.plan_id GROUP BY plan_id ON CONFLICT (plan_id) DO UPDATE SET total_annual_cost = EXCLUDED.total_annual_cost, total_lifetime_cost = EXCLUDED.total_lifetime_cost, updated_at = now(); RETURN NEW; END; $$; -- -- Name: update_updated_at_column(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.update_updated_at_column() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$; -- -- Name: validate_cpt_code(text); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION public.validate_cpt_code(code_to_check text) RETURNS TABLE(is_valid boolean, code_description text, pfr_50th numeric, pfr_75th numeric, pfr_90th numeric, mfu_50th numeric, mfu_75th numeric, mfu_90th numeric) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT TRUE, c.code_description, c.pfr_50th, c.pfr_75th, c.pfr_90th, c.mfu_50th, c.mfu_75th, c.mfu_90th FROM cpt_codes c WHERE c.code = code_to_check; IF NOT FOUND THEN RETURN QUERY SELECT FALSE, NULL::TEXT, NULL::DECIMAL, NULL::DECIMAL, NULL::DECIMAL, NULL::DECIMAL, NULL::DECIMAL, NULL::DECIMAL; END IF; END; $$; -- -- Name: apply_rls(jsonb, integer); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.apply_rls(wal jsonb, max_record_bytes integer DEFAULT (1024 * 1024)) RETURNS SETOF realtime.wal_rls LANGUAGE plpgsql AS $$ declare -- Regclass of the table e.g. public.notes entity_ regclass = (quote_ident(wal ->> 'schema') || '.' || quote_ident(wal ->> 'table'))::regclass; -- I, U, D, T: insert, update ... action realtime.action = ( case wal ->> 'action' when 'I' then 'INSERT' when 'U' then 'UPDATE' when 'D' then 'DELETE' else 'ERROR' end ); -- Is row level security enabled for the table is_rls_enabled bool = relrowsecurity from pg_class where oid = entity_; subscriptions realtime.subscription[] = array_agg(subs) from realtime.subscription subs where subs.entity = entity_; -- Subscription vars roles regrole[] = array_agg(distinct us.claims_role::text) from unnest(subscriptions) us; working_role regrole; claimed_role regrole; claims jsonb; subscription_id uuid; subscription_has_access bool; visible_to_subscription_ids uuid[] = '{}'; -- structured info for wal's columns columns realtime.wal_column[]; -- previous identity values for update/delete old_columns realtime.wal_column[]; error_record_exceeds_max_size boolean = octet_length(wal::text) > max_record_bytes; -- Primary jsonb output for record output jsonb; begin perform set_config('role', null, true); columns = array_agg( ( x->>'name', x->>'type', x->>'typeoid', realtime.cast( (x->'value') #>> '{}', coalesce( (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4 (x->>'type')::regtype ) ), (pks ->> 'name') is not null, true )::realtime.wal_column ) from jsonb_array_elements(wal -> 'columns') x left join jsonb_array_elements(wal -> 'pk') pks on (x ->> 'name') = (pks ->> 'name'); old_columns = array_agg( ( x->>'name', x->>'type', x->>'typeoid', realtime.cast( (x->'value') #>> '{}', coalesce( (x->>'typeoid')::regtype, -- null when wal2json version <= 2.4 (x->>'type')::regtype ) ), (pks ->> 'name') is not null, true )::realtime.wal_column ) from jsonb_array_elements(wal -> 'identity') x left join jsonb_array_elements(wal -> 'pk') pks on (x ->> 'name') = (pks ->> 'name'); for working_role in select * from unnest(roles) loop -- Update `is_selectable` for columns and old_columns columns = array_agg( ( c.name, c.type_name, c.type_oid, c.value, c.is_pkey, pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT') )::realtime.wal_column ) from unnest(columns) c; old_columns = array_agg( ( c.name, c.type_name, c.type_oid, c.value, c.is_pkey, pg_catalog.has_column_privilege(working_role, entity_, c.name, 'SELECT') )::realtime.wal_column ) from unnest(old_columns) c; if action <> 'DELETE' and count(1) = 0 from unnest(columns) c where c.is_pkey then return next ( jsonb_build_object( 'schema', wal ->> 'schema', 'table', wal ->> 'table', 'type', action ), is_rls_enabled, -- subscriptions is already filtered by entity (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role), array['Error 400: Bad Request, no primary key'] )::realtime.wal_rls; -- The claims role does not have SELECT permission to the primary key of entity elsif action <> 'DELETE' and sum(c.is_selectable::int) <> count(1) from unnest(columns) c where c.is_pkey then return next ( jsonb_build_object( 'schema', wal ->> 'schema', 'table', wal ->> 'table', 'type', action ), is_rls_enabled, (select array_agg(s.subscription_id) from unnest(subscriptions) as s where claims_role = working_role), array['Error 401: Unauthorized'] )::realtime.wal_rls; else output = jsonb_build_object( 'schema', wal ->> 'schema', 'table', wal ->> 'table', 'type', action, 'commit_timestamp', to_char( ((wal ->> 'timestamp')::timestamptz at time zone 'utc'), 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"' ), 'columns', ( select jsonb_agg( jsonb_build_object( 'name', pa.attname, 'type', pt.typname ) order by pa.attnum asc ) from pg_attribute pa join pg_type pt on pa.atttypid = pt.oid where attrelid = entity_ and attnum > 0 and pg_catalog.has_column_privilege(working_role, entity_, pa.attname, 'SELECT') ) ) -- Add "record" key for insert and update || case when action in ('INSERT', 'UPDATE') then jsonb_build_object( 'record', ( select jsonb_object_agg( -- if unchanged toast, get column name and value from old record coalesce((c).name, (oc).name), case when (c).name is null then (oc).value else (c).value end ) from unnest(columns) c full outer join unnest(old_columns) oc on (c).name = (oc).name where coalesce((c).is_selectable, (oc).is_selectable) and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64)) ) ) else '{}'::jsonb end -- Add "old_record" key for update and delete || case when action = 'UPDATE' then jsonb_build_object( 'old_record', ( select jsonb_object_agg((c).name, (c).value) from unnest(old_columns) c where (c).is_selectable and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64)) ) ) when action = 'DELETE' then jsonb_build_object( 'old_record', ( select jsonb_object_agg((c).name, (c).value) from unnest(old_columns) c where (c).is_selectable and ( not error_record_exceeds_max_size or (octet_length((c).value::text) <= 64)) and ( not is_rls_enabled or (c).is_pkey ) -- if RLS enabled, we can't secure deletes so filter to pkey ) ) else '{}'::jsonb end; -- Create the prepared statement if is_rls_enabled and action <> 'DELETE' then if (select 1 from pg_prepared_statements where name = 'walrus_rls_stmt' limit 1) > 0 then deallocate walrus_rls_stmt; end if; execute realtime.build_prepared_statement_sql('walrus_rls_stmt', entity_, columns); end if; visible_to_subscription_ids = '{}'; for subscription_id, claims in ( select subs.subscription_id, subs.claims from unnest(subscriptions) subs where subs.entity = entity_ and subs.claims_role = working_role and ( realtime.is_visible_through_filters(columns, subs.filters) or ( action = 'DELETE' and realtime.is_visible_through_filters(old_columns, subs.filters) ) ) ) loop if not is_rls_enabled or action = 'DELETE' then visible_to_subscription_ids = visible_to_subscription_ids || subscription_id; else -- Check if RLS allows the role to see the record perform -- Trim leading and trailing quotes from working_role because set_config -- doesn't recognize the role as valid if they are included set_config('role', trim(both '"' from working_role::text), true), set_config('request.jwt.claims', claims::text, true); execute 'execute walrus_rls_stmt' into subscription_has_access; if subscription_has_access then visible_to_subscription_ids = visible_to_subscription_ids || subscription_id; end if; end if; end loop; perform set_config('role', null, true); return next ( output, is_rls_enabled, visible_to_subscription_ids, case when error_record_exceeds_max_size then array['Error 413: Payload Too Large'] else '{}' end )::realtime.wal_rls; end if; end loop; perform set_config('role', null, true); end; $$; -- -- Name: broadcast_changes(text, text, text, text, text, record, record, text); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE 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) RETURNS void LANGUAGE plpgsql AS $$ DECLARE -- Declare a variable to hold the JSONB representation of the row row_data jsonb := '{}'::jsonb; BEGIN IF level = 'STATEMENT' THEN RAISE EXCEPTION 'function can only be triggered for each row, not for each statement'; END IF; -- Check the operation type and handle accordingly IF operation = 'INSERT' OR operation = 'UPDATE' OR operation = 'DELETE' THEN row_data := jsonb_build_object('old_record', OLD, 'record', NEW, 'operation', operation, 'table', table_name, 'schema', table_schema); PERFORM realtime.send (row_data, event_name, topic_name); ELSE RAISE EXCEPTION 'Unexpected operation type: %', operation; END IF; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION 'Failed to process the row: %', SQLERRM; END; $$; -- -- Name: build_prepared_statement_sql(text, regclass, realtime.wal_column[]); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.build_prepared_statement_sql(prepared_statement_name text, entity regclass, columns realtime.wal_column[]) RETURNS text LANGUAGE sql AS $$ /* Builds a sql string that, if executed, creates a prepared statement to tests retrive a row from *entity* by its primary key columns. Example select realtime.build_prepared_statement_sql('public.notes', '{"id"}'::text[], '{"bigint"}'::text[]) */ select 'prepare ' || prepared_statement_name || ' as select exists( select 1 from ' || entity || ' where ' || string_agg(quote_ident(pkc.name) || '=' || quote_nullable(pkc.value #>> '{}') , ' and ') || ' )' from unnest(columns) pkc where pkc.is_pkey group by entity $$; -- -- Name: cast(text, regtype); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime."cast"(val text, type_ regtype) RETURNS jsonb LANGUAGE plpgsql IMMUTABLE AS $$ declare res jsonb; begin execute format('select to_jsonb(%L::'|| type_::text || ')', val) into res; return res; end $$; -- -- Name: check_equality_op(realtime.equality_op, regtype, text, text); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.check_equality_op(op realtime.equality_op, type_ regtype, val_1 text, val_2 text) RETURNS boolean LANGUAGE plpgsql IMMUTABLE AS $$ /* Casts *val_1* and *val_2* as type *type_* and check the *op* condition for truthiness */ declare op_symbol text = ( case when op = 'eq' then '=' when op = 'neq' then '!=' when op = 'lt' then '<' when op = 'lte' then '<=' when op = 'gt' then '>' when op = 'gte' then '>=' when op = 'in' then '= any' else 'UNKNOWN OP' end ); res boolean; begin execute format( 'select %L::'|| type_::text || ' ' || op_symbol || ' ( %L::' || ( case when op = 'in' then type_::text || '[]' else type_::text end ) || ')', val_1, val_2) into res; return res; end; $$; -- -- Name: is_visible_through_filters(realtime.wal_column[], realtime.user_defined_filter[]); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.is_visible_through_filters(columns realtime.wal_column[], filters realtime.user_defined_filter[]) RETURNS boolean LANGUAGE sql IMMUTABLE AS $_$ /* Should the record be visible (true) or filtered out (false) after *filters* are applied */ select -- Default to allowed when no filters present $2 is null -- no filters. this should not happen because subscriptions has a default or array_length($2, 1) is null -- array length of an empty array is null or bool_and( coalesce( realtime.check_equality_op( op:=f.op, type_:=coalesce( col.type_oid::regtype, -- null when wal2json version <= 2.4 col.type_name::regtype ), -- cast jsonb to text val_1:=col.value #>> '{}', val_2:=f.value ), false -- if null, filter does not match ) ) from unnest(filters) f join unnest(columns) col on f.column_name = col.name; $_$; -- -- Name: list_changes(name, name, integer, integer); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.list_changes(publication name, slot_name name, max_changes integer, max_record_bytes integer) RETURNS SETOF realtime.wal_rls LANGUAGE sql SET log_min_messages TO 'fatal' AS $$ with pub as ( select concat_ws( ',', case when bool_or(pubinsert) then 'insert' else null end, case when bool_or(pubupdate) then 'update' else null end, case when bool_or(pubdelete) then 'delete' else null end ) as w2j_actions, coalesce( string_agg( realtime.quote_wal2json(format('%I.%I', schemaname, tablename)::regclass), ',' ) filter (where ppt.tablename is not null and ppt.tablename not like '% %'), '' ) w2j_add_tables from pg_publication pp left join pg_publication_tables ppt on pp.pubname = ppt.pubname where pp.pubname = publication group by pp.pubname limit 1 ), w2j as ( select x.*, pub.w2j_add_tables from pub, pg_logical_slot_get_changes( slot_name, null, max_changes, 'include-pk', 'true', 'include-transaction', 'false', 'include-timestamp', 'true', 'include-type-oids', 'true', 'format-version', '2', 'actions', pub.w2j_actions, 'add-tables', pub.w2j_add_tables ) x ) select xyz.wal, xyz.is_rls_enabled, xyz.subscription_ids, xyz.errors from w2j, realtime.apply_rls( wal := w2j.data::jsonb, max_record_bytes := max_record_bytes ) xyz(wal, is_rls_enabled, subscription_ids, errors) where w2j.w2j_add_tables <> '' and xyz.subscription_ids[1] is not null $$; -- -- Name: quote_wal2json(regclass); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.quote_wal2json(entity regclass) RETURNS text LANGUAGE sql IMMUTABLE STRICT AS $$ select ( select string_agg('' || ch,'') from unnest(string_to_array(nsp.nspname::text, null)) with ordinality x(ch, idx) where not (x.idx = 1 and x.ch = '"') and not ( x.idx = array_length(string_to_array(nsp.nspname::text, null), 1) and x.ch = '"' ) ) || '.' || ( select string_agg('' || ch,'') from unnest(string_to_array(pc.relname::text, null)) with ordinality x(ch, idx) where not (x.idx = 1 and x.ch = '"') and not ( x.idx = array_length(string_to_array(nsp.nspname::text, null), 1) and x.ch = '"' ) ) from pg_class pc join pg_namespace nsp on pc.relnamespace = nsp.oid where pc.oid = entity $$; -- -- Name: send(jsonb, text, text, boolean); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.send(payload jsonb, event text, topic text, private boolean DEFAULT true) RETURNS void LANGUAGE plpgsql AS $$ BEGIN BEGIN -- Set the topic configuration EXECUTE format('SET LOCAL realtime.topic TO %L', topic); -- Attempt to insert the message INSERT INTO realtime.messages (payload, event, topic, private, extension) VALUES (payload, event, topic, private, 'broadcast'); EXCEPTION WHEN OTHERS THEN -- Capture and notify the error PERFORM pg_notify( 'realtime:system', jsonb_build_object( 'error', SQLERRM, 'function', 'realtime.send', 'event', event, 'topic', topic, 'private', private )::text ); END; END; $$; -- -- Name: subscription_check_filters(); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.subscription_check_filters() RETURNS trigger LANGUAGE plpgsql AS $$ /* Validates that the user defined filters for a subscription: - refer to valid columns that the claimed role may access - values are coercable to the correct column type */ declare col_names text[] = coalesce( array_agg(c.column_name order by c.ordinal_position), '{}'::text[] ) from information_schema.columns c where format('%I.%I', c.table_schema, c.table_name)::regclass = new.entity and pg_catalog.has_column_privilege( (new.claims ->> 'role'), format('%I.%I', c.table_schema, c.table_name)::regclass, c.column_name, 'SELECT' ); filter realtime.user_defined_filter; col_type regtype; in_val jsonb; begin for filter in select * from unnest(new.filters) loop -- Filtered column is valid if not filter.column_name = any(col_names) then raise exception 'invalid column for filter %', filter.column_name; end if; -- Type is sanitized and safe for string interpolation col_type = ( select atttypid::regtype from pg_catalog.pg_attribute where attrelid = new.entity and attname = filter.column_name ); if col_type is null then raise exception 'failed to lookup type for column %', filter.column_name; end if; -- Set maximum number of entries for in filter if filter.op = 'in'::realtime.equality_op then in_val = realtime.cast(filter.value, (col_type::text || '[]')::regtype); if coalesce(jsonb_array_length(in_val), 0) > 100 then raise exception 'too many values for `in` filter. Maximum 100'; end if; else -- raises an exception if value is not coercable to type perform realtime.cast(filter.value, col_type); end if; end loop; -- Apply consistent order to filters so the unique constraint on -- (subscription_id, entity, filters) can't be tricked by a different filter order new.filters = coalesce( array_agg(f order by f.column_name, f.op, f.value), '{}' ) from unnest(new.filters) f; return new; end; $$; -- -- Name: to_regrole(text); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.to_regrole(role_name text) RETURNS regrole LANGUAGE sql IMMUTABLE AS $$ select role_name::regrole $$; -- -- Name: topic(); Type: FUNCTION; Schema: realtime; Owner: - -- CREATE FUNCTION realtime.topic() RETURNS text LANGUAGE sql STABLE AS $$ select nullif(current_setting('realtime.topic', true), '')::text; $$; -- -- Name: can_insert_object(text, text, uuid, jsonb); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.can_insert_object(bucketid text, name text, owner uuid, metadata jsonb) RETURNS void LANGUAGE plpgsql AS $$ BEGIN INSERT INTO "storage"."objects" ("bucket_id", "name", "owner", "metadata") VALUES (bucketid, name, owner, metadata); -- hack to rollback the successful insert RAISE sqlstate 'PT200' using message = 'ROLLBACK', detail = 'rollback successful insert'; END $$; -- -- Name: extension(text); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.extension(name text) RETURNS text LANGUAGE plpgsql AS $$ DECLARE _parts text[]; _filename text; BEGIN select string_to_array(name, '/') into _parts; select _parts[array_length(_parts,1)] into _filename; -- @todo return the last part instead of 2 return reverse(split_part(reverse(_filename), '.', 1)); END $$; -- -- Name: filename(text); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.filename(name text) RETURNS text LANGUAGE plpgsql AS $$ DECLARE _parts text[]; BEGIN select string_to_array(name, '/') into _parts; return _parts[array_length(_parts,1)]; END $$; -- -- Name: foldername(text); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.foldername(name text) RETURNS text[] LANGUAGE plpgsql AS $$ DECLARE _parts text[]; BEGIN select string_to_array(name, '/') into _parts; return _parts[1:array_length(_parts,1)-1]; END $$; -- -- Name: get_size_by_bucket(); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.get_size_by_bucket() RETURNS TABLE(size bigint, bucket_id text) LANGUAGE plpgsql AS $$ BEGIN return query select sum((metadata->>'size')::int) as size, obj.bucket_id from "storage".objects as obj group by obj.bucket_id; END $$; -- -- Name: list_multipart_uploads_with_delimiter(text, text, text, integer, text, text); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.list_multipart_uploads_with_delimiter(bucket_id text, prefix_param text, delimiter_param text, max_keys integer DEFAULT 100, next_key_token text DEFAULT ''::text, next_upload_token text DEFAULT ''::text) RETURNS TABLE(key text, id text, created_at timestamp with time zone) LANGUAGE plpgsql AS $_$ BEGIN RETURN QUERY EXECUTE 'SELECT DISTINCT ON(key COLLATE "C") * from ( SELECT CASE WHEN position($2 IN substring(key from length($1) + 1)) > 0 THEN substring(key from 1 for length($1) + position($2 IN substring(key from length($1) + 1))) ELSE key END AS key, id, created_at FROM storage.s3_multipart_uploads WHERE bucket_id = $5 AND key ILIKE $1 || ''%'' AND CASE WHEN $4 != '''' AND $6 = '''' THEN CASE WHEN position($2 IN substring(key from length($1) + 1)) > 0 THEN substring(key from 1 for length($1) + position($2 IN substring(key from length($1) + 1))) COLLATE "C" > $4 ELSE key COLLATE "C" > $4 END ELSE true END AND CASE WHEN $6 != '''' THEN id COLLATE "C" > $6 ELSE true END ORDER BY key COLLATE "C" ASC, created_at ASC) as e order by key COLLATE "C" LIMIT $3' USING prefix_param, delimiter_param, max_keys, next_key_token, bucket_id, next_upload_token; END; $_$; -- -- Name: list_objects_with_delimiter(text, text, text, integer, text, text); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.list_objects_with_delimiter(bucket_id text, prefix_param text, delimiter_param text, max_keys integer DEFAULT 100, start_after text DEFAULT ''::text, next_token text DEFAULT ''::text) RETURNS TABLE(name text, id uuid, metadata jsonb, updated_at timestamp with time zone) LANGUAGE plpgsql AS $_$ BEGIN RETURN QUERY EXECUTE 'SELECT DISTINCT ON(name COLLATE "C") * from ( SELECT CASE WHEN position($2 IN substring(name from length($1) + 1)) > 0 THEN substring(name from 1 for length($1) + position($2 IN substring(name from length($1) + 1))) ELSE name END AS name, id, metadata, updated_at FROM storage.objects WHERE bucket_id = $5 AND name ILIKE $1 || ''%'' AND CASE WHEN $6 != '''' THEN name COLLATE "C" > $6 ELSE true END AND CASE WHEN $4 != '''' THEN CASE WHEN position($2 IN substring(name from length($1) + 1)) > 0 THEN substring(name from 1 for length($1) + position($2 IN substring(name from length($1) + 1))) COLLATE "C" > $4 ELSE name COLLATE "C" > $4 END ELSE true END ORDER BY name COLLATE "C" ASC) as e order by name COLLATE "C" LIMIT $3' USING prefix_param, delimiter_param, max_keys, next_token, bucket_id, start_after; END; $_$; -- -- Name: operation(); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.operation() RETURNS text LANGUAGE plpgsql STABLE AS $$ BEGIN RETURN current_setting('storage.operation', true); END; $$; -- -- Name: search(text, text, integer, integer, integer, text, text, text); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.search(prefix text, bucketname text, limits integer DEFAULT 100, levels integer DEFAULT 1, offsets integer DEFAULT 0, search text DEFAULT ''::text, sortcolumn text DEFAULT 'name'::text, sortorder text DEFAULT 'asc'::text) RETURNS TABLE(name text, id uuid, updated_at timestamp with time zone, created_at timestamp with time zone, last_accessed_at timestamp with time zone, metadata jsonb) LANGUAGE plpgsql STABLE AS $_$ declare v_order_by text; v_sort_order text; begin case when sortcolumn = 'name' then v_order_by = 'name'; when sortcolumn = 'updated_at' then v_order_by = 'updated_at'; when sortcolumn = 'created_at' then v_order_by = 'created_at'; when sortcolumn = 'last_accessed_at' then v_order_by = 'last_accessed_at'; else v_order_by = 'name'; end case; case when sortorder = 'asc' then v_sort_order = 'asc'; when sortorder = 'desc' then v_sort_order = 'desc'; else v_sort_order = 'asc'; end case; v_order_by = v_order_by || ' ' || v_sort_order; return query execute 'with folders as ( select path_tokens[$1] as folder from storage.objects where objects.name ilike $2 || $3 || ''%'' and bucket_id = $4 and array_length(objects.path_tokens, 1) <> $1 group by folder order by folder ' || v_sort_order || ' ) (select folder as "name", null as id, null as updated_at, null as created_at, null as last_accessed_at, null as metadata from folders) union all (select path_tokens[$1] as "name", id, updated_at, created_at, last_accessed_at, metadata from storage.objects where objects.name ilike $2 || $3 || ''%'' and bucket_id = $4 and array_length(objects.path_tokens, 1) = $1 order by ' || v_order_by || ') limit $5 offset $6' using levels, prefix, search, bucketname, limits, offsets; end; $_$; -- -- Name: update_updated_at_column(); Type: FUNCTION; Schema: storage; Owner: - -- CREATE FUNCTION storage.update_updated_at_column() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN NEW.updated_at = now(); RETURN NEW; END; $$; -- -- Name: secrets_encrypt_secret_secret(); Type: FUNCTION; Schema: vault; Owner: - -- CREATE FUNCTION vault.secrets_encrypt_secret_secret() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN new.secret = CASE WHEN new.secret IS NULL THEN NULL ELSE CASE WHEN new.key_id IS NULL THEN NULL ELSE pg_catalog.encode( pgsodium.crypto_aead_det_encrypt( pg_catalog.convert_to(new.secret, 'utf8'), pg_catalog.convert_to((new.id::text || new.description::text || new.created_at::text || new.updated_at::text)::text, 'utf8'), new.key_id::uuid, new.nonce ), 'base64') END END; RETURN new; END; $$; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: audit_log_entries; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.audit_log_entries ( instance_id uuid, id uuid NOT NULL, payload json, created_at timestamp with time zone, ip_address character varying(64) DEFAULT ''::character varying NOT NULL ); -- -- Name: TABLE audit_log_entries; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.audit_log_entries IS 'Auth: Audit trail for user actions.'; -- -- Name: flow_state; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.flow_state ( id uuid NOT NULL, user_id uuid, auth_code text NOT NULL, code_challenge_method auth.code_challenge_method NOT NULL, code_challenge text NOT NULL, provider_type text NOT NULL, provider_access_token text, provider_refresh_token text, created_at timestamp with time zone, updated_at timestamp with time zone, authentication_method text NOT NULL, auth_code_issued_at timestamp with time zone ); -- -- Name: TABLE flow_state; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.flow_state IS 'stores metadata for pkce logins'; -- -- Name: identities; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.identities ( provider_id text NOT NULL, user_id uuid NOT NULL, identity_data jsonb NOT NULL, provider text NOT NULL, last_sign_in_at timestamp with time zone, created_at timestamp with time zone, updated_at timestamp with time zone, email text GENERATED ALWAYS AS (lower((identity_data ->> 'email'::text))) STORED, id uuid DEFAULT gen_random_uuid() NOT NULL ); -- -- Name: TABLE identities; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.identities IS 'Auth: Stores identities associated to a user.'; -- -- Name: COLUMN identities.email; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON COLUMN auth.identities.email IS 'Auth: Email is a generated column that references the optional email property in the identity_data'; -- -- Name: instances; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.instances ( id uuid NOT NULL, uuid uuid, raw_base_config text, created_at timestamp with time zone, updated_at timestamp with time zone ); -- -- Name: TABLE instances; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.instances IS 'Auth: Manages users across multiple sites.'; -- -- Name: mfa_amr_claims; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.mfa_amr_claims ( session_id uuid NOT NULL, created_at timestamp with time zone NOT NULL, updated_at timestamp with time zone NOT NULL, authentication_method text NOT NULL, id uuid NOT NULL ); -- -- Name: TABLE mfa_amr_claims; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.mfa_amr_claims IS 'auth: stores authenticator method reference claims for multi factor authentication'; -- -- Name: mfa_challenges; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.mfa_challenges ( id uuid NOT NULL, factor_id uuid NOT NULL, created_at timestamp with time zone NOT NULL, verified_at timestamp with time zone, ip_address inet NOT NULL, otp_code text, web_authn_session_data jsonb ); -- -- Name: TABLE mfa_challenges; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.mfa_challenges IS 'auth: stores metadata about challenge requests made'; -- -- Name: mfa_factors; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.mfa_factors ( id uuid NOT NULL, user_id uuid NOT NULL, friendly_name text, factor_type auth.factor_type NOT NULL, status auth.factor_status NOT NULL, created_at timestamp with time zone NOT NULL, updated_at timestamp with time zone NOT NULL, secret text, phone text, last_challenged_at timestamp with time zone, web_authn_credential jsonb, web_authn_aaguid uuid ); -- -- Name: TABLE mfa_factors; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.mfa_factors IS 'auth: stores metadata about factors'; -- -- Name: one_time_tokens; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.one_time_tokens ( id uuid NOT NULL, user_id uuid NOT NULL, token_type auth.one_time_token_type NOT NULL, token_hash text NOT NULL, relates_to text NOT NULL, created_at timestamp without time zone DEFAULT now() NOT NULL, updated_at timestamp without time zone DEFAULT now() NOT NULL, CONSTRAINT one_time_tokens_token_hash_check CHECK ((char_length(token_hash) > 0)) ); -- -- Name: refresh_tokens; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.refresh_tokens ( instance_id uuid, id bigint NOT NULL, token character varying(255), user_id character varying(255), revoked boolean, created_at timestamp with time zone, updated_at timestamp with time zone, parent character varying(255), session_id uuid ); -- -- Name: TABLE refresh_tokens; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.refresh_tokens IS 'Auth: Store of tokens used to refresh JWT tokens once they expire.'; -- -- Name: refresh_tokens_id_seq; Type: SEQUENCE; Schema: auth; Owner: - -- CREATE SEQUENCE auth.refresh_tokens_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; -- -- Name: refresh_tokens_id_seq; Type: SEQUENCE OWNED BY; Schema: auth; Owner: - -- ALTER SEQUENCE auth.refresh_tokens_id_seq OWNED BY auth.refresh_tokens.id; -- -- Name: saml_providers; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.saml_providers ( id uuid NOT NULL, sso_provider_id uuid NOT NULL, entity_id text NOT NULL, metadata_xml text NOT NULL, metadata_url text, attribute_mapping jsonb, created_at timestamp with time zone, updated_at timestamp with time zone, name_id_format text, CONSTRAINT "entity_id not empty" CHECK ((char_length(entity_id) > 0)), CONSTRAINT "metadata_url not empty" CHECK (((metadata_url = NULL::text) OR (char_length(metadata_url) > 0))), CONSTRAINT "metadata_xml not empty" CHECK ((char_length(metadata_xml) > 0)) ); -- -- Name: TABLE saml_providers; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.saml_providers IS 'Auth: Manages SAML Identity Provider connections.'; -- -- Name: saml_relay_states; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.saml_relay_states ( id uuid NOT NULL, sso_provider_id uuid NOT NULL, request_id text NOT NULL, for_email text, redirect_to text, created_at timestamp with time zone, updated_at timestamp with time zone, flow_state_id uuid, CONSTRAINT "request_id not empty" CHECK ((char_length(request_id) > 0)) ); -- -- Name: TABLE saml_relay_states; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.saml_relay_states IS 'Auth: Contains SAML Relay State information for each Service Provider initiated login.'; -- -- Name: schema_migrations; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.schema_migrations ( version character varying(255) NOT NULL ); -- -- Name: TABLE schema_migrations; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.schema_migrations IS 'Auth: Manages updates to the auth system.'; -- -- Name: sessions; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.sessions ( id uuid NOT NULL, user_id uuid NOT NULL, created_at timestamp with time zone, updated_at timestamp with time zone, factor_id uuid, aal auth.aal_level, not_after timestamp with time zone, refreshed_at timestamp without time zone, user_agent text, ip inet, tag text ); -- -- Name: TABLE sessions; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.sessions IS 'Auth: Stores session data associated to a user.'; -- -- Name: COLUMN sessions.not_after; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON COLUMN auth.sessions.not_after IS 'Auth: Not after is a nullable column that contains a timestamp after which the session should be regarded as expired.'; -- -- Name: sso_domains; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.sso_domains ( id uuid NOT NULL, sso_provider_id uuid NOT NULL, domain text NOT NULL, created_at timestamp with time zone, updated_at timestamp with time zone, CONSTRAINT "domain not empty" CHECK ((char_length(domain) > 0)) ); -- -- Name: TABLE sso_domains; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.sso_domains IS 'Auth: Manages SSO email address domain mapping to an SSO Identity Provider.'; -- -- Name: sso_providers; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.sso_providers ( id uuid NOT NULL, resource_id text, created_at timestamp with time zone, updated_at timestamp with time zone, CONSTRAINT "resource_id not empty" CHECK (((resource_id = NULL::text) OR (char_length(resource_id) > 0))) ); -- -- Name: TABLE sso_providers; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.sso_providers IS 'Auth: Manages SSO identity provider information; see saml_providers for SAML.'; -- -- Name: COLUMN sso_providers.resource_id; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON COLUMN auth.sso_providers.resource_id IS 'Auth: Uniquely identifies a SSO provider according to a user-chosen resource ID (case insensitive), useful in infrastructure as code.'; -- -- Name: users; Type: TABLE; Schema: auth; Owner: - -- CREATE TABLE auth.users ( instance_id uuid, id uuid NOT NULL, aud character varying(255), role character varying(255), email character varying(255), encrypted_password character varying(255), email_confirmed_at timestamp with time zone, invited_at timestamp with time zone, confirmation_token character varying(255), confirmation_sent_at timestamp with time zone, recovery_token character varying(255), recovery_sent_at timestamp with time zone, email_change_token_new character varying(255), email_change character varying(255), email_change_sent_at timestamp with time zone, last_sign_in_at timestamp with time zone, raw_app_meta_data jsonb, raw_user_meta_data jsonb, is_super_admin boolean, created_at timestamp with time zone, updated_at timestamp with time zone, phone text DEFAULT NULL::character varying, phone_confirmed_at timestamp with time zone, phone_change text DEFAULT ''::character varying, phone_change_token character varying(255) DEFAULT ''::character varying, phone_change_sent_at timestamp with time zone, confirmed_at timestamp with time zone GENERATED ALWAYS AS (LEAST(email_confirmed_at, phone_confirmed_at)) STORED, email_change_token_current character varying(255) DEFAULT ''::character varying, email_change_confirm_status smallint DEFAULT 0, banned_until timestamp with time zone, reauthentication_token character varying(255) DEFAULT ''::character varying, reauthentication_sent_at timestamp with time zone, is_sso_user boolean DEFAULT false NOT NULL, deleted_at timestamp with time zone, is_anonymous boolean DEFAULT false NOT NULL, CONSTRAINT users_email_change_confirm_status_check CHECK (((email_change_confirm_status >= 0) AND (email_change_confirm_status <= 2))) ); -- -- Name: TABLE users; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON TABLE auth.users IS 'Auth: Stores user login data within a secure schema.'; -- -- Name: COLUMN users.is_sso_user; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON COLUMN auth.users.is_sso_user IS 'Auth: Set this column to true when the account comes from SSO. These accounts can have duplicate emails.'; -- -- Name: care_plan_entries; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.care_plan_entries ( id uuid DEFAULT gen_random_uuid() NOT NULL, plan_id uuid NOT NULL, category text NOT NULL, item text NOT NULL, frequency text, annual_cost numeric NOT NULL, lifetime_cost numeric NOT NULL, start_age integer NOT NULL, end_age integer NOT NULL, created_at timestamp with time zone DEFAULT now(), updated_at timestamp with time zone DEFAULT now(), cpt_code text, cpt_description text, min_cost numeric, max_cost numeric, avg_cost numeric, mfr_adjusted numeric(10,2), pfr_adjusted numeric(10,2), is_one_time boolean DEFAULT false, min_frequency numeric(10,2), max_frequency numeric(10,2), min_duration numeric(10,2), max_duration numeric(10,2), use_age_increments boolean DEFAULT false, age_increments text, mfr_factor numeric(10,4), pfr_factor numeric(10,4) ); -- -- Name: TABLE care_plan_entries; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON TABLE public.care_plan_entries IS 'Table for storing care plan entries with age increment support'; -- -- Name: COLUMN care_plan_entries.annual_cost; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON COLUMN public.care_plan_entries.annual_cost IS 'Annual cost (numeric to support decimal values)'; -- -- Name: COLUMN care_plan_entries.lifetime_cost; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON COLUMN public.care_plan_entries.lifetime_cost IS 'Lifetime cost (numeric to support decimal values)'; -- -- Name: COLUMN care_plan_entries.min_cost; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON COLUMN public.care_plan_entries.min_cost IS 'Minimum cost (numeric to support decimal values)'; -- -- Name: COLUMN care_plan_entries.max_cost; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON COLUMN public.care_plan_entries.max_cost IS 'Maximum cost (numeric to support decimal values)'; -- -- Name: COLUMN care_plan_entries.avg_cost; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON COLUMN public.care_plan_entries.avg_cost IS 'Average cost (numeric to support decimal values)'; -- -- Name: COLUMN care_plan_entries.use_age_increments; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON COLUMN public.care_plan_entries.use_age_increments IS 'Flag to indicate if this entry uses age increments'; -- -- Name: COLUMN care_plan_entries.age_increments; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON COLUMN public.care_plan_entries.age_increments IS 'JSON string containing age increment data'; -- -- Name: COLUMN care_plan_entries.mfr_factor; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON COLUMN public.care_plan_entries.mfr_factor IS 'Medicare Fee Schedule geographic adjustment factor'; -- -- Name: COLUMN care_plan_entries.pfr_factor; Type: COMMENT; Schema: public; Owner: - -- COMMENT ON COLUMN public.care_plan_entries.pfr_factor IS 'Private Fee Schedule geographic adjustment factor'; -- -- Name: cpt_codes; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.cpt_codes ( code text NOT NULL, code_description text NOT NULL, pfr_50th numeric(10,2) NOT NULL, pfr_75th numeric(10,2) NOT NULL, pfr_90th numeric(10,2) NOT NULL, mfu_50th numeric(10,2) NOT NULL, mfu_75th numeric(10,2) NOT NULL, mfu_90th numeric(10,2) NOT NULL, created_at timestamp with time zone DEFAULT now() ); -- -- Name: fee_chart; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.fee_chart ( id uuid DEFAULT gen_random_uuid() NOT NULL, code text NOT NULL, description text, fee numeric(10,2) DEFAULT 0.00 NOT NULL, created_at timestamp with time zone DEFAULT now() ); -- -- Name: fee_imports_staging; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.fee_imports_staging ( id uuid DEFAULT gen_random_uuid() NOT NULL, raw_data jsonb, processed boolean DEFAULT false, error_message text, created_at timestamp with time zone DEFAULT now() ); -- -- Name: fee_sheet; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.fee_sheet ( code text NOT NULL, code_description text NOT NULL, pfr_50th numeric(10,2) NOT NULL, pfr_75th numeric(10,2) NOT NULL, pfr_90th numeric(10,2) NOT NULL, mfu_50th numeric(10,2) NOT NULL, mfu_75th numeric(10,2) NOT NULL, mfu_90th numeric(10,2) NOT NULL, created_at timestamp with time zone DEFAULT now() ); -- -- Name: gaf_import_errors; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.gaf_import_errors ( id uuid DEFAULT gen_random_uuid() NOT NULL, row_data text, error_message text, created_at timestamp with time zone DEFAULT now() ); -- -- Name: gaf_lookup; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.gaf_lookup ( id uuid DEFAULT gen_random_uuid() NOT NULL, zip text NOT NULL, city text, state_id text NOT NULL, state_name text NOT NULL, county_fips text NOT NULL, county_name text NOT NULL, mfr_code numeric(8,4) NOT NULL, pfr_code numeric(8,4) NOT NULL, asa_factor numeric(8,4) NOT NULL, conversion_factor_asa_50th numeric(10,2) NOT NULL, conversion_factor_asa_75th numeric(10,2) NOT NULL, created_at timestamp with time zone DEFAULT now() ); -- -- Name: geographic_factors; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.geographic_factors ( id uuid DEFAULT gen_random_uuid() NOT NULL, zip text NOT NULL, city text, state_id text NOT NULL, state_name text NOT NULL, county_fips text NOT NULL, county_name text NOT NULL, mfr_code text NOT NULL, pfr_code text NOT NULL, gaf_lookup numeric(8,4), created_at timestamp with time zone DEFAULT now(), mfr_factor numeric, pfr_factor numeric ); -- -- Name: import_errors; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.import_errors ( id uuid DEFAULT gen_random_uuid() NOT NULL, table_name text NOT NULL, row_number integer, error_message text NOT NULL, raw_data text, created_at timestamp with time zone DEFAULT now() ); -- -- Name: life_care_plan_category_totals; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.life_care_plan_category_totals ( id uuid DEFAULT gen_random_uuid() NOT NULL, plan_id uuid NOT NULL, category text NOT NULL, annual_cost numeric DEFAULT 0 NOT NULL, lifetime_cost numeric DEFAULT 0 NOT NULL, min_cost numeric, avg_cost numeric, max_cost numeric, created_at timestamp with time zone DEFAULT now(), updated_at timestamp with time zone DEFAULT now() ); -- -- Name: life_care_plan_totals; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.life_care_plan_totals ( id uuid DEFAULT gen_random_uuid() NOT NULL, plan_id uuid NOT NULL, total_annual_cost numeric DEFAULT 0 NOT NULL, total_lifetime_cost numeric DEFAULT 0 NOT NULL, created_at timestamp with time zone DEFAULT now(), updated_at timestamp with time zone DEFAULT now() ); -- -- Name: life_care_plans; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.life_care_plans ( id uuid DEFAULT gen_random_uuid() NOT NULL, user_id uuid NOT NULL, date_of_birth date NOT NULL, date_of_injury date, created_at timestamp with time zone DEFAULT now(), updated_at timestamp with time zone DEFAULT now(), zip_code text, age_at_injury numeric(5,2), statistical_lifespan integer, first_name text DEFAULT ''::text NOT NULL, last_name text DEFAULT ''::text NOT NULL, race text DEFAULT ''::text NOT NULL, gender text DEFAULT ''::text NOT NULL, street_address text DEFAULT ''::text NOT NULL, city text DEFAULT ''::text NOT NULL, state text DEFAULT ''::text NOT NULL, county_apc text DEFAULT ''::text NOT NULL, county_drg text DEFAULT ''::text NOT NULL, life_expectancy numeric(5,2), projected_age_at_death numeric(5,2) ); -- -- Name: plans; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.plans ( id uuid DEFAULT gen_random_uuid() NOT NULL, title text NOT NULL, description text, user_id uuid, created_at timestamp with time zone DEFAULT timezone('utc'::text, now()) NOT NULL ); -- -- Name: quick_codes; Type: TABLE; Schema: public; Owner: - -- CREATE TABLE public.quick_codes ( id uuid DEFAULT gen_random_uuid() NOT NULL, category text NOT NULL, subcategory text NOT NULL, code text NOT NULL, description text, created_at timestamp with time zone DEFAULT now() ); -- -- Name: messages; Type: TABLE; Schema: realtime; Owner: - -- CREATE TABLE realtime.messages ( topic text NOT NULL, extension text NOT NULL, payload jsonb, event text, private boolean DEFAULT false, updated_at timestamp without time zone DEFAULT now() NOT NULL, inserted_at timestamp without time zone DEFAULT now() NOT NULL, id uuid DEFAULT gen_random_uuid() NOT NULL ) PARTITION BY RANGE (inserted_at); -- -- Name: schema_migrations; Type: TABLE; Schema: realtime; Owner: - -- CREATE TABLE realtime.schema_migrations ( version bigint NOT NULL, inserted_at timestamp(0) without time zone ); -- -- Name: subscription; Type: TABLE; Schema: realtime; Owner: - -- CREATE TABLE realtime.subscription ( id bigint NOT NULL, subscription_id uuid NOT NULL, entity regclass NOT NULL, filters realtime.user_defined_filter[] DEFAULT '{}'::realtime.user_defined_filter[] NOT NULL, claims jsonb NOT NULL, claims_role regrole GENERATED ALWAYS AS (realtime.to_regrole((claims ->> 'role'::text))) STORED NOT NULL, created_at timestamp without time zone DEFAULT timezone('utc'::text, now()) NOT NULL ); -- -- Name: subscription_id_seq; Type: SEQUENCE; Schema: realtime; Owner: - -- ALTER TABLE realtime.subscription ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY ( SEQUENCE NAME realtime.subscription_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1 ); -- -- Name: buckets; Type: TABLE; Schema: storage; Owner: - -- CREATE TABLE storage.buckets ( id text NOT NULL, name text NOT NULL, owner uuid, created_at timestamp with time zone DEFAULT now(), updated_at timestamp with time zone DEFAULT now(), public boolean DEFAULT false, avif_autodetection boolean DEFAULT false, file_size_limit bigint, allowed_mime_types text[], owner_id text ); -- -- Name: COLUMN buckets.owner; Type: COMMENT; Schema: storage; Owner: - -- COMMENT ON COLUMN storage.buckets.owner IS 'Field is deprecated, use owner_id instead'; -- -- Name: migrations; Type: TABLE; Schema: storage; Owner: - -- CREATE TABLE storage.migrations ( id integer NOT NULL, name character varying(100) NOT NULL, hash character varying(40) NOT NULL, executed_at timestamp without time zone DEFAULT CURRENT_TIMESTAMP ); -- -- Name: objects; Type: TABLE; Schema: storage; Owner: - -- CREATE TABLE storage.objects ( id uuid DEFAULT gen_random_uuid() NOT NULL, bucket_id text, name text, owner uuid, created_at timestamp with time zone DEFAULT now(), updated_at timestamp with time zone DEFAULT now(), last_accessed_at timestamp with time zone DEFAULT now(), metadata jsonb, path_tokens text[] GENERATED ALWAYS AS (string_to_array(name, '/'::text)) STORED, version text, owner_id text, user_metadata jsonb ); -- -- Name: COLUMN objects.owner; Type: COMMENT; Schema: storage; Owner: - -- COMMENT ON COLUMN storage.objects.owner IS 'Field is deprecated, use owner_id instead'; -- -- Name: s3_multipart_uploads; Type: TABLE; Schema: storage; Owner: - -- CREATE TABLE storage.s3_multipart_uploads ( id text NOT NULL, in_progress_size bigint DEFAULT 0 NOT NULL, upload_signature text NOT NULL, bucket_id text NOT NULL, key text NOT NULL COLLATE pg_catalog."C", version text NOT NULL, owner_id text, created_at timestamp with time zone DEFAULT now() NOT NULL, user_metadata jsonb ); -- -- Name: s3_multipart_uploads_parts; Type: TABLE; Schema: storage; Owner: - -- CREATE TABLE storage.s3_multipart_uploads_parts ( id uuid DEFAULT gen_random_uuid() NOT NULL, upload_id text NOT NULL, size bigint DEFAULT 0 NOT NULL, part_number integer NOT NULL, bucket_id text NOT NULL, key text NOT NULL COLLATE pg_catalog."C", etag text NOT NULL, owner_id text, version text NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL ); -- -- Name: schema_migrations; Type: TABLE; Schema: supabase_migrations; Owner: - -- CREATE TABLE supabase_migrations.schema_migrations ( version text NOT NULL, statements text[], name text ); -- -- Name: decrypted_secrets; Type: VIEW; Schema: vault; Owner: - -- CREATE VIEW vault.decrypted_secrets AS SELECT secrets.id, secrets.name, secrets.description, secrets.secret, CASE WHEN (secrets.secret IS NULL) THEN NULL::text ELSE CASE WHEN (secrets.key_id IS NULL) THEN NULL::text ELSE convert_from(pgsodium.crypto_aead_det_decrypt(decode(secrets.secret, 'base64'::text), convert_to(((((secrets.id)::text || secrets.description) || (secrets.created_at)::text) || (secrets.updated_at)::text), 'utf8'::name), secrets.key_id, secrets.nonce), 'utf8'::name) END END AS decrypted_secret, secrets.key_id, secrets.nonce, secrets.created_at, secrets.updated_at FROM vault.secrets; -- -- Name: refresh_tokens id; Type: DEFAULT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.refresh_tokens ALTER COLUMN id SET DEFAULT nextval('auth.refresh_tokens_id_seq'::regclass); -- -- Name: mfa_amr_claims amr_id_pk; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.mfa_amr_claims ADD CONSTRAINT amr_id_pk PRIMARY KEY (id); -- -- Name: audit_log_entries audit_log_entries_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.audit_log_entries ADD CONSTRAINT audit_log_entries_pkey PRIMARY KEY (id); -- -- Name: flow_state flow_state_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.flow_state ADD CONSTRAINT flow_state_pkey PRIMARY KEY (id); -- -- Name: identities identities_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.identities ADD CONSTRAINT identities_pkey PRIMARY KEY (id); -- -- Name: identities identities_provider_id_provider_unique; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.identities ADD CONSTRAINT identities_provider_id_provider_unique UNIQUE (provider_id, provider); -- -- Name: instances instances_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.instances ADD CONSTRAINT instances_pkey PRIMARY KEY (id); -- -- Name: mfa_amr_claims mfa_amr_claims_session_id_authentication_method_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.mfa_amr_claims ADD CONSTRAINT mfa_amr_claims_session_id_authentication_method_pkey UNIQUE (session_id, authentication_method); -- -- Name: mfa_challenges mfa_challenges_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.mfa_challenges ADD CONSTRAINT mfa_challenges_pkey PRIMARY KEY (id); -- -- Name: mfa_factors mfa_factors_last_challenged_at_key; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.mfa_factors ADD CONSTRAINT mfa_factors_last_challenged_at_key UNIQUE (last_challenged_at); -- -- Name: mfa_factors mfa_factors_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.mfa_factors ADD CONSTRAINT mfa_factors_pkey PRIMARY KEY (id); -- -- Name: one_time_tokens one_time_tokens_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.one_time_tokens ADD CONSTRAINT one_time_tokens_pkey PRIMARY KEY (id); -- -- Name: refresh_tokens refresh_tokens_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.refresh_tokens ADD CONSTRAINT refresh_tokens_pkey PRIMARY KEY (id); -- -- Name: refresh_tokens refresh_tokens_token_unique; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.refresh_tokens ADD CONSTRAINT refresh_tokens_token_unique UNIQUE (token); -- -- Name: saml_providers saml_providers_entity_id_key; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.saml_providers ADD CONSTRAINT saml_providers_entity_id_key UNIQUE (entity_id); -- -- Name: saml_providers saml_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.saml_providers ADD CONSTRAINT saml_providers_pkey PRIMARY KEY (id); -- -- Name: saml_relay_states saml_relay_states_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.saml_relay_states ADD CONSTRAINT saml_relay_states_pkey PRIMARY KEY (id); -- -- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.schema_migrations ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version); -- -- Name: sessions sessions_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.sessions ADD CONSTRAINT sessions_pkey PRIMARY KEY (id); -- -- Name: sso_domains sso_domains_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.sso_domains ADD CONSTRAINT sso_domains_pkey PRIMARY KEY (id); -- -- Name: sso_providers sso_providers_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.sso_providers ADD CONSTRAINT sso_providers_pkey PRIMARY KEY (id); -- -- Name: users users_phone_key; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.users ADD CONSTRAINT users_phone_key UNIQUE (phone); -- -- Name: users users_pkey; Type: CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.users ADD CONSTRAINT users_pkey PRIMARY KEY (id); -- -- Name: care_plan_entries care_plan_entries_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.care_plan_entries ADD CONSTRAINT care_plan_entries_pkey PRIMARY KEY (id); -- -- Name: cpt_codes cpt_codes_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.cpt_codes ADD CONSTRAINT cpt_codes_pkey PRIMARY KEY (code); -- -- Name: fee_chart fee_chart_code_key; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.fee_chart ADD CONSTRAINT fee_chart_code_key UNIQUE (code); -- -- Name: fee_chart fee_chart_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.fee_chart ADD CONSTRAINT fee_chart_pkey PRIMARY KEY (id); -- -- Name: fee_imports_staging fee_imports_staging_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.fee_imports_staging ADD CONSTRAINT fee_imports_staging_pkey PRIMARY KEY (id); -- -- Name: fee_sheet fee_sheet_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.fee_sheet ADD CONSTRAINT fee_sheet_pkey PRIMARY KEY (code); -- -- Name: gaf_import_errors gaf_import_errors_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.gaf_import_errors ADD CONSTRAINT gaf_import_errors_pkey PRIMARY KEY (id); -- -- Name: gaf_lookup gaf_lookup_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.gaf_lookup ADD CONSTRAINT gaf_lookup_pkey PRIMARY KEY (id); -- -- Name: gaf_lookup gaf_lookup_zip_key; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.gaf_lookup ADD CONSTRAINT gaf_lookup_zip_key UNIQUE (zip); -- -- Name: geographic_factors geographic_factors_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.geographic_factors ADD CONSTRAINT geographic_factors_pkey PRIMARY KEY (id); -- -- Name: import_errors import_errors_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.import_errors ADD CONSTRAINT import_errors_pkey PRIMARY KEY (id); -- -- Name: life_care_plan_category_totals life_care_plan_category_totals_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.life_care_plan_category_totals ADD CONSTRAINT life_care_plan_category_totals_pkey PRIMARY KEY (id); -- -- Name: life_care_plan_category_totals life_care_plan_category_totals_plan_id_category_key; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.life_care_plan_category_totals ADD CONSTRAINT life_care_plan_category_totals_plan_id_category_key UNIQUE (plan_id, category); -- -- Name: life_care_plan_totals life_care_plan_totals_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.life_care_plan_totals ADD CONSTRAINT life_care_plan_totals_pkey PRIMARY KEY (id); -- -- Name: life_care_plan_totals life_care_plan_totals_plan_id_key; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.life_care_plan_totals ADD CONSTRAINT life_care_plan_totals_plan_id_key UNIQUE (plan_id); -- -- Name: life_care_plans life_care_plans_id_key; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.life_care_plans ADD CONSTRAINT life_care_plans_id_key UNIQUE (id); -- -- Name: life_care_plans life_care_plans_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.life_care_plans ADD CONSTRAINT life_care_plans_pkey PRIMARY KEY (id); -- -- Name: plans plans_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.plans ADD CONSTRAINT plans_pkey PRIMARY KEY (id); -- -- Name: quick_codes quick_codes_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.quick_codes ADD CONSTRAINT quick_codes_pkey PRIMARY KEY (id); -- -- Name: quick_codes quick_codes_unique_combo; Type: CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.quick_codes ADD CONSTRAINT quick_codes_unique_combo UNIQUE (category, subcategory, code); -- -- Name: messages messages_pkey; Type: CONSTRAINT; Schema: realtime; Owner: - -- ALTER TABLE ONLY realtime.messages ADD CONSTRAINT messages_pkey PRIMARY KEY (id, inserted_at); -- -- Name: subscription pk_subscription; Type: CONSTRAINT; Schema: realtime; Owner: - -- ALTER TABLE ONLY realtime.subscription ADD CONSTRAINT pk_subscription PRIMARY KEY (id); -- -- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: realtime; Owner: - -- ALTER TABLE ONLY realtime.schema_migrations ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version); -- -- Name: buckets buckets_pkey; Type: CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.buckets ADD CONSTRAINT buckets_pkey PRIMARY KEY (id); -- -- Name: migrations migrations_name_key; Type: CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.migrations ADD CONSTRAINT migrations_name_key UNIQUE (name); -- -- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.migrations ADD CONSTRAINT migrations_pkey PRIMARY KEY (id); -- -- Name: objects objects_pkey; Type: CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.objects ADD CONSTRAINT objects_pkey PRIMARY KEY (id); -- -- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_pkey; Type: CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.s3_multipart_uploads_parts ADD CONSTRAINT s3_multipart_uploads_parts_pkey PRIMARY KEY (id); -- -- Name: s3_multipart_uploads s3_multipart_uploads_pkey; Type: CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.s3_multipart_uploads ADD CONSTRAINT s3_multipart_uploads_pkey PRIMARY KEY (id); -- -- Name: schema_migrations schema_migrations_pkey; Type: CONSTRAINT; Schema: supabase_migrations; Owner: - -- ALTER TABLE ONLY supabase_migrations.schema_migrations ADD CONSTRAINT schema_migrations_pkey PRIMARY KEY (version); -- -- Name: audit_logs_instance_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX audit_logs_instance_id_idx ON auth.audit_log_entries USING btree (instance_id); -- -- Name: confirmation_token_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX confirmation_token_idx ON auth.users USING btree (confirmation_token) WHERE ((confirmation_token)::text !~ '^[0-9 ]*$'::text); -- -- Name: email_change_token_current_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX email_change_token_current_idx ON auth.users USING btree (email_change_token_current) WHERE ((email_change_token_current)::text !~ '^[0-9 ]*$'::text); -- -- Name: email_change_token_new_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX email_change_token_new_idx ON auth.users USING btree (email_change_token_new) WHERE ((email_change_token_new)::text !~ '^[0-9 ]*$'::text); -- -- Name: factor_id_created_at_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX factor_id_created_at_idx ON auth.mfa_factors USING btree (user_id, created_at); -- -- Name: flow_state_created_at_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX flow_state_created_at_idx ON auth.flow_state USING btree (created_at DESC); -- -- Name: identities_email_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX identities_email_idx ON auth.identities USING btree (email text_pattern_ops); -- -- Name: INDEX identities_email_idx; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON INDEX auth.identities_email_idx IS 'Auth: Ensures indexed queries on the email column'; -- -- Name: identities_user_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX identities_user_id_idx ON auth.identities USING btree (user_id); -- -- Name: idx_auth_code; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX idx_auth_code ON auth.flow_state USING btree (auth_code); -- -- Name: idx_user_id_auth_method; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX idx_user_id_auth_method ON auth.flow_state USING btree (user_id, authentication_method); -- -- Name: mfa_challenge_created_at_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX mfa_challenge_created_at_idx ON auth.mfa_challenges USING btree (created_at DESC); -- -- Name: mfa_factors_user_friendly_name_unique; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX mfa_factors_user_friendly_name_unique ON auth.mfa_factors USING btree (friendly_name, user_id) WHERE (TRIM(BOTH FROM friendly_name) <> ''::text); -- -- Name: mfa_factors_user_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX mfa_factors_user_id_idx ON auth.mfa_factors USING btree (user_id); -- -- Name: one_time_tokens_relates_to_hash_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX one_time_tokens_relates_to_hash_idx ON auth.one_time_tokens USING hash (relates_to); -- -- Name: one_time_tokens_token_hash_hash_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX one_time_tokens_token_hash_hash_idx ON auth.one_time_tokens USING hash (token_hash); -- -- Name: one_time_tokens_user_id_token_type_key; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX one_time_tokens_user_id_token_type_key ON auth.one_time_tokens USING btree (user_id, token_type); -- -- Name: reauthentication_token_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX reauthentication_token_idx ON auth.users USING btree (reauthentication_token) WHERE ((reauthentication_token)::text !~ '^[0-9 ]*$'::text); -- -- Name: recovery_token_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX recovery_token_idx ON auth.users USING btree (recovery_token) WHERE ((recovery_token)::text !~ '^[0-9 ]*$'::text); -- -- Name: refresh_tokens_instance_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX refresh_tokens_instance_id_idx ON auth.refresh_tokens USING btree (instance_id); -- -- Name: refresh_tokens_instance_id_user_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX refresh_tokens_instance_id_user_id_idx ON auth.refresh_tokens USING btree (instance_id, user_id); -- -- Name: refresh_tokens_parent_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX refresh_tokens_parent_idx ON auth.refresh_tokens USING btree (parent); -- -- Name: refresh_tokens_session_id_revoked_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX refresh_tokens_session_id_revoked_idx ON auth.refresh_tokens USING btree (session_id, revoked); -- -- Name: refresh_tokens_updated_at_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX refresh_tokens_updated_at_idx ON auth.refresh_tokens USING btree (updated_at DESC); -- -- Name: saml_providers_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX saml_providers_sso_provider_id_idx ON auth.saml_providers USING btree (sso_provider_id); -- -- Name: saml_relay_states_created_at_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX saml_relay_states_created_at_idx ON auth.saml_relay_states USING btree (created_at DESC); -- -- Name: saml_relay_states_for_email_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX saml_relay_states_for_email_idx ON auth.saml_relay_states USING btree (for_email); -- -- Name: saml_relay_states_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX saml_relay_states_sso_provider_id_idx ON auth.saml_relay_states USING btree (sso_provider_id); -- -- Name: sessions_not_after_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX sessions_not_after_idx ON auth.sessions USING btree (not_after DESC); -- -- Name: sessions_user_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX sessions_user_id_idx ON auth.sessions USING btree (user_id); -- -- Name: sso_domains_domain_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX sso_domains_domain_idx ON auth.sso_domains USING btree (lower(domain)); -- -- Name: sso_domains_sso_provider_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX sso_domains_sso_provider_id_idx ON auth.sso_domains USING btree (sso_provider_id); -- -- Name: sso_providers_resource_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX sso_providers_resource_id_idx ON auth.sso_providers USING btree (lower(resource_id)); -- -- Name: unique_phone_factor_per_user; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX unique_phone_factor_per_user ON auth.mfa_factors USING btree (user_id, phone); -- -- Name: user_id_created_at_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX user_id_created_at_idx ON auth.sessions USING btree (user_id, created_at); -- -- Name: users_email_partial_key; Type: INDEX; Schema: auth; Owner: - -- CREATE UNIQUE INDEX users_email_partial_key ON auth.users USING btree (email) WHERE (is_sso_user = false); -- -- Name: INDEX users_email_partial_key; Type: COMMENT; Schema: auth; Owner: - -- COMMENT ON INDEX auth.users_email_partial_key IS 'Auth: A partial unique index that applies only when is_sso_user is false'; -- -- Name: users_instance_id_email_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX users_instance_id_email_idx ON auth.users USING btree (instance_id, lower((email)::text)); -- -- Name: users_instance_id_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX users_instance_id_idx ON auth.users USING btree (instance_id); -- -- Name: users_is_anonymous_idx; Type: INDEX; Schema: auth; Owner: - -- CREATE INDEX users_is_anonymous_idx ON auth.users USING btree (is_anonymous); -- -- Name: idx_care_plan_entries_cpt_code; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_care_plan_entries_cpt_code ON public.care_plan_entries USING btree (cpt_code); -- -- Name: idx_care_plan_entries_plan_category; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_care_plan_entries_plan_category ON public.care_plan_entries USING btree (plan_id, category); -- -- Name: idx_cpt_codes_code; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_cpt_codes_code ON public.cpt_codes USING btree (code); -- -- Name: idx_cpt_codes_description; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_cpt_codes_description ON public.cpt_codes USING gin (code_description public.gin_trgm_ops); -- -- Name: idx_fee_chart_code_search; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_fee_chart_code_search ON public.fee_chart USING btree (code text_pattern_ops); -- -- Name: idx_fee_chart_description_search; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_fee_chart_description_search ON public.fee_chart USING gin (description public.gin_trgm_ops); -- -- Name: idx_fee_sheet_code; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_fee_sheet_code ON public.fee_sheet USING btree (code); -- -- Name: idx_fee_sheet_description; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_fee_sheet_description ON public.fee_sheet USING gin (code_description public.gin_trgm_ops); -- -- Name: idx_gaf_lookup_location; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_gaf_lookup_location ON public.gaf_lookup USING btree (state_id, county_name); -- -- Name: idx_gaf_lookup_zip; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_gaf_lookup_zip ON public.gaf_lookup USING btree (zip); -- -- Name: idx_geographic_factors_zip; Type: INDEX; Schema: public; Owner: - -- CREATE UNIQUE INDEX idx_geographic_factors_zip ON public.geographic_factors USING btree (zip); -- -- Name: idx_quick_codes_category; Type: INDEX; Schema: public; Owner: - -- CREATE INDEX idx_quick_codes_category ON public.quick_codes USING btree (category, subcategory); -- -- Name: ix_realtime_subscription_entity; Type: INDEX; Schema: realtime; Owner: - -- CREATE INDEX ix_realtime_subscription_entity ON realtime.subscription USING btree (entity); -- -- Name: subscription_subscription_id_entity_filters_key; Type: INDEX; Schema: realtime; Owner: - -- CREATE UNIQUE INDEX subscription_subscription_id_entity_filters_key ON realtime.subscription USING btree (subscription_id, entity, filters); -- -- Name: bname; Type: INDEX; Schema: storage; Owner: - -- CREATE UNIQUE INDEX bname ON storage.buckets USING btree (name); -- -- Name: bucketid_objname; Type: INDEX; Schema: storage; Owner: - -- CREATE UNIQUE INDEX bucketid_objname ON storage.objects USING btree (bucket_id, name); -- -- Name: idx_multipart_uploads_list; Type: INDEX; Schema: storage; Owner: - -- CREATE INDEX idx_multipart_uploads_list ON storage.s3_multipart_uploads USING btree (bucket_id, key, created_at); -- -- Name: idx_objects_bucket_id_name; Type: INDEX; Schema: storage; Owner: - -- CREATE INDEX idx_objects_bucket_id_name ON storage.objects USING btree (bucket_id, name COLLATE "C"); -- -- Name: name_prefix_search; Type: INDEX; Schema: storage; Owner: - -- CREATE INDEX name_prefix_search ON storage.objects USING btree (name text_pattern_ops); -- -- Name: care_plan_entries convert_cost_to_numeric_trigger; Type: TRIGGER; Schema: public; Owner: - -- CREATE TRIGGER convert_cost_to_numeric_trigger BEFORE INSERT OR UPDATE ON public.care_plan_entries FOR EACH ROW EXECUTE FUNCTION public.convert_cost_to_numeric(); -- -- Name: gaf_lookup ensure_padded_zip; Type: TRIGGER; Schema: public; Owner: - -- CREATE TRIGGER ensure_padded_zip BEFORE INSERT OR UPDATE ON public.gaf_lookup FOR EACH ROW EXECUTE FUNCTION public.pad_zip_code_trigger(); -- -- Name: care_plan_entries handle_decimal_values_trigger; Type: TRIGGER; Schema: public; Owner: - -- CREATE TRIGGER handle_decimal_values_trigger BEFORE INSERT OR UPDATE ON public.care_plan_entries FOR EACH ROW EXECUTE FUNCTION public.handle_decimal_values(); -- -- Name: care_plan_entries update_lcp_totals_trigger; Type: TRIGGER; Schema: public; Owner: - -- CREATE TRIGGER update_lcp_totals_trigger AFTER INSERT OR DELETE OR UPDATE ON public.care_plan_entries FOR EACH ROW EXECUTE FUNCTION public.update_life_care_plan_totals(); -- -- Name: subscription tr_check_filters; Type: TRIGGER; Schema: realtime; Owner: - -- CREATE TRIGGER tr_check_filters BEFORE INSERT OR UPDATE ON realtime.subscription FOR EACH ROW EXECUTE FUNCTION realtime.subscription_check_filters(); -- -- Name: objects update_objects_updated_at; Type: TRIGGER; Schema: storage; Owner: - -- CREATE TRIGGER update_objects_updated_at BEFORE UPDATE ON storage.objects FOR EACH ROW EXECUTE FUNCTION storage.update_updated_at_column(); -- -- Name: identities identities_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.identities ADD CONSTRAINT identities_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE; -- -- Name: mfa_amr_claims mfa_amr_claims_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.mfa_amr_claims ADD CONSTRAINT mfa_amr_claims_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE; -- -- Name: mfa_challenges mfa_challenges_auth_factor_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.mfa_challenges ADD CONSTRAINT mfa_challenges_auth_factor_id_fkey FOREIGN KEY (factor_id) REFERENCES auth.mfa_factors(id) ON DELETE CASCADE; -- -- Name: mfa_factors mfa_factors_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.mfa_factors ADD CONSTRAINT mfa_factors_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE; -- -- Name: one_time_tokens one_time_tokens_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.one_time_tokens ADD CONSTRAINT one_time_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE; -- -- Name: refresh_tokens refresh_tokens_session_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.refresh_tokens ADD CONSTRAINT refresh_tokens_session_id_fkey FOREIGN KEY (session_id) REFERENCES auth.sessions(id) ON DELETE CASCADE; -- -- Name: saml_providers saml_providers_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.saml_providers ADD CONSTRAINT saml_providers_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE; -- -- Name: saml_relay_states saml_relay_states_flow_state_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.saml_relay_states ADD CONSTRAINT saml_relay_states_flow_state_id_fkey FOREIGN KEY (flow_state_id) REFERENCES auth.flow_state(id) ON DELETE CASCADE; -- -- Name: saml_relay_states saml_relay_states_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.saml_relay_states ADD CONSTRAINT saml_relay_states_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE; -- -- Name: sessions sessions_user_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.sessions ADD CONSTRAINT sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE; -- -- Name: sso_domains sso_domains_sso_provider_id_fkey; Type: FK CONSTRAINT; Schema: auth; Owner: - -- ALTER TABLE ONLY auth.sso_domains ADD CONSTRAINT sso_domains_sso_provider_id_fkey FOREIGN KEY (sso_provider_id) REFERENCES auth.sso_providers(id) ON DELETE CASCADE; -- -- Name: care_plan_entries care_plan_entries_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.care_plan_entries ADD CONSTRAINT care_plan_entries_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.life_care_plans(id) ON DELETE CASCADE; -- -- Name: life_care_plan_category_totals life_care_plan_category_totals_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.life_care_plan_category_totals ADD CONSTRAINT life_care_plan_category_totals_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.life_care_plans(id); -- -- Name: life_care_plan_totals life_care_plan_totals_plan_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.life_care_plan_totals ADD CONSTRAINT life_care_plan_totals_plan_id_fkey FOREIGN KEY (plan_id) REFERENCES public.life_care_plans(id); -- -- Name: life_care_plans life_care_plans_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.life_care_plans ADD CONSTRAINT life_care_plans_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id); -- -- Name: plans plans_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - -- ALTER TABLE ONLY public.plans ADD CONSTRAINT plans_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE; -- -- Name: objects objects_bucketId_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.objects ADD CONSTRAINT "objects_bucketId_fkey" FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id); -- -- Name: s3_multipart_uploads s3_multipart_uploads_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.s3_multipart_uploads ADD CONSTRAINT s3_multipart_uploads_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id); -- -- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_bucket_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.s3_multipart_uploads_parts ADD CONSTRAINT s3_multipart_uploads_parts_bucket_id_fkey FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id); -- -- Name: s3_multipart_uploads_parts s3_multipart_uploads_parts_upload_id_fkey; Type: FK CONSTRAINT; Schema: storage; Owner: - -- ALTER TABLE ONLY storage.s3_multipart_uploads_parts ADD CONSTRAINT s3_multipart_uploads_parts_upload_id_fkey FOREIGN KEY (upload_id) REFERENCES storage.s3_multipart_uploads(id) ON DELETE CASCADE; -- -- Name: audit_log_entries; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.audit_log_entries ENABLE ROW LEVEL SECURITY; -- -- Name: flow_state; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.flow_state ENABLE ROW LEVEL SECURITY; -- -- Name: identities; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.identities ENABLE ROW LEVEL SECURITY; -- -- Name: instances; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.instances ENABLE ROW LEVEL SECURITY; -- -- Name: mfa_amr_claims; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.mfa_amr_claims ENABLE ROW LEVEL SECURITY; -- -- Name: mfa_challenges; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.mfa_challenges ENABLE ROW LEVEL SECURITY; -- -- Name: mfa_factors; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.mfa_factors ENABLE ROW LEVEL SECURITY; -- -- Name: one_time_tokens; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.one_time_tokens ENABLE ROW LEVEL SECURITY; -- -- Name: refresh_tokens; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.refresh_tokens ENABLE ROW LEVEL SECURITY; -- -- Name: saml_providers; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.saml_providers ENABLE ROW LEVEL SECURITY; -- -- Name: saml_relay_states; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.saml_relay_states ENABLE ROW LEVEL SECURITY; -- -- Name: schema_migrations; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.schema_migrations ENABLE ROW LEVEL SECURITY; -- -- Name: sessions; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.sessions ENABLE ROW LEVEL SECURITY; -- -- Name: sso_domains; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.sso_domains ENABLE ROW LEVEL SECURITY; -- -- Name: sso_providers; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.sso_providers ENABLE ROW LEVEL SECURITY; -- -- Name: users; Type: ROW SECURITY; Schema: auth; Owner: - -- ALTER TABLE auth.users ENABLE ROW LEVEL SECURITY; -- -- Name: quick_codes Anyone can create quick codes; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Anyone can create quick codes" ON public.quick_codes FOR INSERT TO authenticated WITH CHECK (true); -- -- Name: quick_codes Anyone can delete quick codes; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Anyone can delete quick codes" ON public.quick_codes FOR DELETE TO authenticated USING (true); -- -- Name: cpt_codes Anyone can read CPT codes; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Anyone can read CPT codes" ON public.cpt_codes FOR SELECT TO authenticated USING (true); -- -- Name: gaf_lookup Anyone can read GAF lookup; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Anyone can read GAF lookup" ON public.gaf_lookup FOR SELECT TO authenticated USING (true); -- -- Name: fee_sheet Anyone can read fee sheet; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Anyone can read fee sheet" ON public.fee_sheet FOR SELECT TO authenticated USING (true); -- -- Name: geographic_factors Anyone can read geographic factors; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Anyone can read geographic factors" ON public.geographic_factors FOR SELECT TO authenticated USING (true); -- -- Name: quick_codes Anyone can update quick codes; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Anyone can update quick codes" ON public.quick_codes FOR UPDATE TO authenticated USING (true); -- -- Name: quick_codes Anyone can view quick codes; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Anyone can view quick codes" ON public.quick_codes FOR SELECT TO authenticated USING (true); -- -- Name: fee_chart Authenticated users can read fee chart; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Authenticated users can read fee chart" ON public.fee_chart FOR SELECT TO authenticated USING (true); -- -- Name: gaf_import_errors Authenticated users can read import errors; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Authenticated users can read import errors" ON public.gaf_import_errors FOR SELECT TO authenticated USING (true); -- -- Name: import_errors Authenticated users can read import errors; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Authenticated users can read import errors" ON public.import_errors FOR SELECT TO authenticated USING (true); -- -- Name: fee_imports_staging Authenticated users can read staging data; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Authenticated users can read staging data" ON public.fee_imports_staging FOR SELECT TO authenticated USING (true); -- -- Name: care_plan_entries Enable all access to care_plan_entries for authenticated users; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Enable all access to care_plan_entries for authenticated users" ON public.care_plan_entries TO authenticated USING (true) WITH CHECK (true); -- -- Name: life_care_plan_category_totals Enable all access to category totals for authenticated users; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Enable all access to category totals for authenticated users" ON public.life_care_plan_category_totals TO authenticated USING (true) WITH CHECK (true); -- -- Name: life_care_plan_category_totals Enable all operations for authenticated users; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Enable all operations for authenticated users" ON public.life_care_plan_category_totals TO authenticated USING (true) WITH CHECK (true); -- -- Name: life_care_plan_totals Enable all operations for authenticated users; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Enable all operations for authenticated users" ON public.life_care_plan_totals TO authenticated USING (true) WITH CHECK (true); -- -- Name: care_plan_entries Users can create entries for their own plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can create entries for their own plans" ON public.care_plan_entries FOR INSERT TO authenticated WITH CHECK ((EXISTS ( SELECT 1 FROM public.life_care_plans WHERE ((life_care_plans.id = care_plan_entries.plan_id) AND (life_care_plans.user_id = auth.uid()))))); -- -- Name: life_care_plans Users can create their own life care plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can create their own life care plans" ON public.life_care_plans FOR INSERT WITH CHECK (((auth.uid() = user_id) OR (user_id = '00000000-0000-0000-0000-000000000000'::uuid))); -- -- Name: plans Users can create their own plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can create their own plans" ON public.plans FOR INSERT WITH CHECK ((auth.uid() = user_id)); -- -- Name: care_plan_entries Users can delete entries for their own plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can delete entries for their own plans" ON public.care_plan_entries FOR DELETE TO authenticated USING ((EXISTS ( SELECT 1 FROM public.life_care_plans WHERE ((life_care_plans.id = care_plan_entries.plan_id) AND (life_care_plans.user_id = auth.uid()))))); -- -- Name: life_care_plans Users can delete their own life care plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can delete their own life care plans" ON public.life_care_plans FOR DELETE TO authenticated USING ((auth.uid() = user_id)); -- -- Name: plans Users can delete their own plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can delete their own plans" ON public.plans FOR DELETE USING ((auth.uid() = user_id)); -- -- Name: care_plan_entries Users can update entries for their own plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can update entries for their own plans" ON public.care_plan_entries FOR UPDATE TO authenticated USING ((EXISTS ( SELECT 1 FROM public.life_care_plans WHERE ((life_care_plans.id = care_plan_entries.plan_id) AND (life_care_plans.user_id = auth.uid()))))); -- -- Name: life_care_plans Users can update their own life care plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can update their own life care plans" ON public.life_care_plans FOR UPDATE TO authenticated USING ((auth.uid() = user_id)); -- -- Name: plans Users can update their own plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can update their own plans" ON public.plans FOR UPDATE USING ((auth.uid() = user_id)); -- -- Name: care_plan_entries Users can view entries for their own plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can view entries for their own plans" ON public.care_plan_entries FOR SELECT TO authenticated USING ((EXISTS ( SELECT 1 FROM public.life_care_plans WHERE ((life_care_plans.id = care_plan_entries.plan_id) AND (life_care_plans.user_id = auth.uid()))))); -- -- Name: life_care_plan_category_totals Users can view their own category totals; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can view their own category totals" ON public.life_care_plan_category_totals FOR SELECT USING ((plan_id IN ( SELECT life_care_plans.id FROM public.life_care_plans WHERE (life_care_plans.user_id = auth.uid())))); -- -- Name: life_care_plans Users can view their own life care plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can view their own life care plans" ON public.life_care_plans FOR SELECT TO authenticated USING ((auth.uid() = user_id)); -- -- Name: life_care_plan_totals Users can view their own plan totals; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can view their own plan totals" ON public.life_care_plan_totals FOR SELECT USING ((plan_id IN ( SELECT life_care_plans.id FROM public.life_care_plans WHERE (life_care_plans.user_id = auth.uid())))); -- -- Name: plans Users can view their own plans; Type: POLICY; Schema: public; Owner: - -- CREATE POLICY "Users can view their own plans" ON public.plans FOR SELECT USING ((auth.uid() = user_id)); -- -- Name: care_plan_entries; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.care_plan_entries ENABLE ROW LEVEL SECURITY; -- -- Name: cpt_codes; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.cpt_codes ENABLE ROW LEVEL SECURITY; -- -- Name: fee_chart; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.fee_chart ENABLE ROW LEVEL SECURITY; -- -- Name: fee_imports_staging; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.fee_imports_staging ENABLE ROW LEVEL SECURITY; -- -- Name: fee_sheet; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.fee_sheet ENABLE ROW LEVEL SECURITY; -- -- Name: gaf_import_errors; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.gaf_import_errors ENABLE ROW LEVEL SECURITY; -- -- Name: gaf_lookup; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.gaf_lookup ENABLE ROW LEVEL SECURITY; -- -- Name: geographic_factors; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.geographic_factors ENABLE ROW LEVEL SECURITY; -- -- Name: import_errors; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.import_errors ENABLE ROW LEVEL SECURITY; -- -- Name: life_care_plan_category_totals; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.life_care_plan_category_totals ENABLE ROW LEVEL SECURITY; -- -- Name: life_care_plan_totals; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.life_care_plan_totals ENABLE ROW LEVEL SECURITY; -- -- Name: life_care_plans; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.life_care_plans ENABLE ROW LEVEL SECURITY; -- -- Name: plans; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.plans ENABLE ROW LEVEL SECURITY; -- -- Name: quick_codes; Type: ROW SECURITY; Schema: public; Owner: - -- ALTER TABLE public.quick_codes ENABLE ROW LEVEL SECURITY; -- -- Name: messages; Type: ROW SECURITY; Schema: realtime; Owner: - -- ALTER TABLE realtime.messages ENABLE ROW LEVEL SECURITY; -- -- Name: buckets; Type: ROW SECURITY; Schema: storage; Owner: - -- ALTER TABLE storage.buckets ENABLE ROW LEVEL SECURITY; -- -- Name: migrations; Type: ROW SECURITY; Schema: storage; Owner: - -- ALTER TABLE storage.migrations ENABLE ROW LEVEL SECURITY; -- -- Name: objects; Type: ROW SECURITY; Schema: storage; Owner: - -- ALTER TABLE storage.objects ENABLE ROW LEVEL SECURITY; -- -- Name: s3_multipart_uploads; Type: ROW SECURITY; Schema: storage; Owner: - -- ALTER TABLE storage.s3_multipart_uploads ENABLE ROW LEVEL SECURITY; -- -- Name: s3_multipart_uploads_parts; Type: ROW SECURITY; Schema: storage; Owner: - -- ALTER TABLE storage.s3_multipart_uploads_parts ENABLE ROW LEVEL SECURITY; -- -- Name: supabase_realtime; Type: PUBLICATION; Schema: -; Owner: - -- CREATE PUBLICATION supabase_realtime WITH (publish = 'insert, update, delete, truncate'); -- -- Name: issue_graphql_placeholder; Type: EVENT TRIGGER; Schema: -; Owner: - -- CREATE EVENT TRIGGER issue_graphql_placeholder ON sql_drop WHEN TAG IN ('DROP EXTENSION') EXECUTE FUNCTION extensions.set_graphql_placeholder(); -- -- Name: issue_pg_cron_access; Type: EVENT TRIGGER; Schema: -; Owner: - -- CREATE EVENT TRIGGER issue_pg_cron_access ON ddl_command_end WHEN TAG IN ('CREATE EXTENSION') EXECUTE FUNCTION extensions.grant_pg_cron_access(); -- -- Name: issue_pg_graphql_access; Type: EVENT TRIGGER; Schema: -; Owner: - -- CREATE EVENT TRIGGER issue_pg_graphql_access ON ddl_command_end WHEN TAG IN ('CREATE FUNCTION') EXECUTE FUNCTION extensions.grant_pg_graphql_access(); -- -- Name: issue_pg_net_access; Type: EVENT TRIGGER; Schema: -; Owner: - -- CREATE EVENT TRIGGER issue_pg_net_access ON ddl_command_end WHEN TAG IN ('CREATE EXTENSION') EXECUTE FUNCTION extensions.grant_pg_net_access(); -- -- Name: pgrst_ddl_watch; Type: EVENT TRIGGER; Schema: -; Owner: - -- CREATE EVENT TRIGGER pgrst_ddl_watch ON ddl_command_end EXECUTE FUNCTION extensions.pgrst_ddl_watch(); -- -- Name: pgrst_drop_watch; Type: EVENT TRIGGER; Schema: -; Owner: - -- CREATE EVENT TRIGGER pgrst_drop_watch ON sql_drop EXECUTE FUNCTION extensions.pgrst_drop_watch(); -- PostgreSQL database dump complete --