diff --git a/docs/database/README.md b/docs/database/README.md index 48d01473d..6d3d3bbf4 100644 --- a/docs/database/README.md +++ b/docs/database/README.md @@ -18,7 +18,7 @@ | [supabase_functions.hooks](supabase_functions.hooks.md) | 5 | Supabase Functions Hooks: Audit trail for triggered hooks. | BASE TABLE | | [public.study](public.study.md) | 21 | | BASE TABLE | | [public.study_subject](public.study_subject.md) | 7 | | BASE TABLE | -| [public.app_config](public.app_config.md) | 11 | Stores app config for different envs | BASE TABLE | +| [public.app_config](public.app_config.md) | 9 | Stores app config for different envs | BASE TABLE | | [public.repo](public.repo.md) | 4 | Git repo where the generated project is stored | BASE TABLE | | [public.study_invite](public.study_invite.md) | 3 | Study invite codes | BASE TABLE | | [public.subject_progress](public.subject_progress.md) | 6 | | BASE TABLE | diff --git a/docs/database/public.app_config.md b/docs/database/public.app_config.md index 9ad6f539a..05b404751 100644 --- a/docs/database/public.app_config.md +++ b/docs/database/public.app_config.md @@ -9,9 +9,7 @@ Stores app config for different envs | Name | Type | Default | Nullable | Children | Parents | Comment | | ---- | ---- | ------- | -------- | -------- | ------- | ------- | | id | text | | false | | | | -| app_min_version | text | '0.0.0'::text | false | | | | -| app_playstore_url | text | 'https://play.google.com/store/apps/details?id=health.studyu.app'::text | false | | | | -| app_appstore_url | text | 'https://itunes.apple.com/app/id1571991198'::text | false | | | | +| app_min_version | text | | false | | | | | app_privacy | jsonb | | false | | | | | app_terms | jsonb | | false | | | | | designer_privacy | jsonb | | false | | | | diff --git a/docs/database/public.app_config.svg b/docs/database/public.app_config.svg index 0ecf21c58..7c1a3cfa0 100644 --- a/docs/database/public.app_config.svg +++ b/docs/database/public.app_config.svg @@ -4,31 +4,25 @@ - - + + public.app_config - + public.app_config - - -public.app_config -     -[BASE TABLE] - -id -[text] - -app_min_version -[text] + + +public.app_config +     +[BASE TABLE] -app_playstore_url -[text] +id +[text] -app_appstore_url -[text] +app_min_version +[text] app_privacy [jsonb] @@ -50,7 +44,7 @@ analytics [jsonb] - + diff --git a/docs/database/schema.json b/docs/database/schema.json index a1e4e222f..3d40ab780 100644 --- a/docs/database/schema.json +++ b/docs/database/schema.json @@ -1 +1 @@ -{"name":"postgres","desc":"","tables":[{"name":"auth.users","type":"BASE TABLE","comment":"Auth: Stores user login data within a secure schema.","columns":[{"name":"instance_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"aud","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"role","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"email","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"encrypted_password","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"confirmed_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"invited_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"confirmation_token","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"confirmation_sent_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"recovery_token","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"recovery_sent_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"email_change_token","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"email_change","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"email_change_sent_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"last_sign_in_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"raw_app_meta_data","type":"jsonb","nullable":true,"default":null,"comment":""},{"name":"raw_user_meta_data","type":"jsonb","nullable":true,"default":null,"comment":""},{"name":"is_super_admin","type":"boolean","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"users_pkey","def":"CREATE UNIQUE INDEX users_pkey ON auth.users USING btree (id)","table":"auth.users","columns":["id"],"comment":""},{"name":"users_email_key","def":"CREATE UNIQUE INDEX users_email_key ON auth.users USING btree (email)","table":"auth.users","columns":["email"],"comment":""},{"name":"users_instance_id_email_idx","def":"CREATE INDEX users_instance_id_email_idx ON auth.users USING btree (instance_id, email)","table":"auth.users","columns":["email","instance_id"],"comment":""},{"name":"users_instance_id_idx","def":"CREATE INDEX users_instance_id_idx ON auth.users USING btree (instance_id)","table":"auth.users","columns":["instance_id"],"comment":""}],"constraints":[{"name":"users_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"auth.users","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"users_email_key","type":"UNIQUE","def":"UNIQUE (email)","table":"auth.users","referenced_table":"","columns":["email"],"referenced_columns":[],"comment":""}],"triggers":[{"name":"on_auth_user_created","def":"CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION handle_new_user()","comment":""}],"def":""},{"name":"auth.refresh_tokens","type":"BASE TABLE","comment":"Auth: Store of tokens used to refresh JWT tokens once they expire.","columns":[{"name":"instance_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"id","type":"bigint","nullable":false,"default":"nextval('auth.refresh_tokens_id_seq'::regclass)","comment":""},{"name":"token","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"user_id","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"revoked","type":"boolean","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"refresh_tokens_pkey","def":"CREATE UNIQUE INDEX refresh_tokens_pkey ON auth.refresh_tokens USING btree (id)","table":"auth.refresh_tokens","columns":["id"],"comment":""},{"name":"refresh_tokens_instance_id_idx","def":"CREATE INDEX refresh_tokens_instance_id_idx ON auth.refresh_tokens USING btree (instance_id)","table":"auth.refresh_tokens","columns":["instance_id"],"comment":""},{"name":"refresh_tokens_instance_id_user_id_idx","def":"CREATE INDEX refresh_tokens_instance_id_user_id_idx ON auth.refresh_tokens USING btree (instance_id, user_id)","table":"auth.refresh_tokens","columns":["instance_id","user_id"],"comment":""},{"name":"refresh_tokens_token_idx","def":"CREATE INDEX refresh_tokens_token_idx ON auth.refresh_tokens USING btree (token)","table":"auth.refresh_tokens","columns":["token"],"comment":""}],"constraints":[{"name":"refresh_tokens_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"auth.refresh_tokens","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"auth.instances","type":"BASE TABLE","comment":"Auth: Manages users across multiple sites.","columns":[{"name":"id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"uuid","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"raw_base_config","type":"text","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"instances_pkey","def":"CREATE UNIQUE INDEX instances_pkey ON auth.instances USING btree (id)","table":"auth.instances","columns":["id"],"comment":""}],"constraints":[{"name":"instances_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"auth.instances","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"auth.audit_log_entries","type":"BASE TABLE","comment":"Auth: Audit trail for user actions.","columns":[{"name":"instance_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"payload","type":"json","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"audit_log_entries_pkey","def":"CREATE UNIQUE INDEX audit_log_entries_pkey ON auth.audit_log_entries USING btree (id)","table":"auth.audit_log_entries","columns":["id"],"comment":""},{"name":"audit_logs_instance_id_idx","def":"CREATE INDEX audit_logs_instance_id_idx ON auth.audit_log_entries USING btree (instance_id)","table":"auth.audit_log_entries","columns":["instance_id"],"comment":""}],"constraints":[{"name":"audit_log_entries_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"auth.audit_log_entries","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"auth.schema_migrations","type":"BASE TABLE","comment":"Auth: Manages updates to the auth system.","columns":[{"name":"version","type":"varchar(255)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"schema_migrations_pkey","def":"CREATE UNIQUE INDEX schema_migrations_pkey ON auth.schema_migrations USING btree (version)","table":"auth.schema_migrations","columns":["version"],"comment":""}],"constraints":[{"name":"schema_migrations_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (version)","table":"auth.schema_migrations","referenced_table":"","columns":["version"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"storage.buckets","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"text","nullable":false,"default":null,"comment":""},{"name":"name","type":"text","nullable":false,"default":null,"comment":""},{"name":"owner","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""}],"indexes":[{"name":"buckets_pkey","def":"CREATE UNIQUE INDEX buckets_pkey ON storage.buckets USING btree (id)","table":"storage.buckets","columns":["id"],"comment":""},{"name":"bname","def":"CREATE UNIQUE INDEX bname ON storage.buckets USING btree (name)","table":"storage.buckets","columns":["name"],"comment":""}],"constraints":[{"name":"buckets_owner_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (owner) REFERENCES auth.users(id)","table":"storage.buckets","referenced_table":"users","columns":["owner"],"referenced_columns":["id"],"comment":""},{"name":"buckets_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"storage.buckets","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"storage.objects","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"uuid","nullable":false,"default":"uuid_generate_v4()","comment":""},{"name":"bucket_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"owner","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"last_accessed_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"metadata","type":"jsonb","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"objects_pkey","def":"CREATE UNIQUE INDEX objects_pkey ON storage.objects USING btree (id)","table":"storage.objects","columns":["id"],"comment":""},{"name":"bucketid_objname","def":"CREATE UNIQUE INDEX bucketid_objname ON storage.objects USING btree (bucket_id, name)","table":"storage.objects","columns":["bucket_id","name"],"comment":""},{"name":"name_prefix_search","def":"CREATE INDEX name_prefix_search ON storage.objects USING btree (name text_pattern_ops)","table":"storage.objects","columns":["name"],"comment":""}],"constraints":[{"name":"objects_owner_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (owner) REFERENCES auth.users(id)","table":"storage.objects","referenced_table":"users","columns":["owner"],"referenced_columns":["id"],"comment":""},{"name":"objects_bucketId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id)","table":"storage.objects","referenced_table":"buckets","columns":["bucket_id"],"referenced_columns":["id"],"comment":""},{"name":"objects_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"storage.objects","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"storage.migrations","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"integer","nullable":false,"default":null,"comment":""},{"name":"name","type":"varchar(100)","nullable":false,"default":null,"comment":""},{"name":"hash","type":"varchar(40)","nullable":false,"default":null,"comment":""},{"name":"executed_at","type":"timestamp without time zone","nullable":true,"default":"CURRENT_TIMESTAMP","comment":""}],"indexes":[{"name":"migrations_pkey","def":"CREATE UNIQUE INDEX migrations_pkey ON storage.migrations USING btree (id)","table":"storage.migrations","columns":["id"],"comment":""},{"name":"migrations_name_key","def":"CREATE UNIQUE INDEX migrations_name_key ON storage.migrations USING btree (name)","table":"storage.migrations","columns":["name"],"comment":""}],"constraints":[{"name":"migrations_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"storage.migrations","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"migrations_name_key","type":"UNIQUE","def":"UNIQUE (name)","table":"storage.migrations","referenced_table":"","columns":["name"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"net.http_request_queue","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"bigint","nullable":false,"default":"nextval('net.http_request_queue_id_seq'::regclass)","comment":""},{"name":"method","type":"net.http_method","nullable":false,"default":null,"comment":""},{"name":"url","type":"text","nullable":false,"default":null,"comment":""},{"name":"headers","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"body","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"timeout_milliseconds","type":"integer","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":""},{"name":"net._http_response","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"status_code","type":"integer","nullable":true,"default":null,"comment":""},{"name":"content_type","type":"text","nullable":true,"default":null,"comment":""},{"name":"headers","type":"jsonb","nullable":true,"default":null,"comment":""},{"name":"content","type":"text","nullable":true,"default":null,"comment":""},{"name":"timed_out","type":"boolean","nullable":true,"default":null,"comment":""},{"name":"error_msg","type":"text","nullable":true,"default":null,"comment":""},{"name":"created","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""}],"indexes":[{"name":"_http_response_created_idx","def":"CREATE INDEX _http_response_created_idx ON net._http_response USING btree (created)","table":"net._http_response","columns":["created"],"comment":""}],"constraints":[],"triggers":[],"def":""},{"name":"supabase_functions.migrations","type":"BASE TABLE","comment":"","columns":[{"name":"version","type":"text","nullable":false,"default":null,"comment":""},{"name":"inserted_at","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""}],"indexes":[{"name":"migrations_pkey","def":"CREATE UNIQUE INDEX migrations_pkey ON supabase_functions.migrations USING btree (version)","table":"supabase_functions.migrations","columns":["version"],"comment":""}],"constraints":[{"name":"migrations_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (version)","table":"supabase_functions.migrations","referenced_table":"","columns":["version"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"supabase_functions.hooks","type":"BASE TABLE","comment":"Supabase Functions Hooks: Audit trail for triggered hooks.","columns":[{"name":"id","type":"bigint","nullable":false,"default":"nextval('supabase_functions.hooks_id_seq'::regclass)","comment":""},{"name":"hook_table_id","type":"integer","nullable":false,"default":null,"comment":""},{"name":"hook_name","type":"text","nullable":false,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""},{"name":"request_id","type":"bigint","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"hooks_pkey","def":"CREATE UNIQUE INDEX hooks_pkey ON supabase_functions.hooks USING btree (id)","table":"supabase_functions.hooks","columns":["id"],"comment":""},{"name":"supabase_functions_hooks_request_id_idx","def":"CREATE INDEX supabase_functions_hooks_request_id_idx ON supabase_functions.hooks USING btree (request_id)","table":"supabase_functions.hooks","columns":["request_id"],"comment":""},{"name":"supabase_functions_hooks_h_table_id_h_name_idx","def":"CREATE INDEX supabase_functions_hooks_h_table_id_h_name_idx ON supabase_functions.hooks USING btree (hook_table_id, hook_name)","table":"supabase_functions.hooks","columns":["hook_name","hook_table_id"],"comment":""}],"constraints":[{"name":"hooks_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"supabase_functions.hooks","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"public.study","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"uuid","nullable":false,"default":"gen_random_uuid()","comment":""},{"name":"contact","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"title","type":"text","nullable":false,"default":null,"comment":""},{"name":"description","type":"text","nullable":false,"default":null,"comment":""},{"name":"icon_name","type":"text","nullable":false,"default":null,"comment":""},{"name":"published","type":"boolean","nullable":false,"default":"false","comment":""},{"name":"registry_published","type":"boolean","nullable":false,"default":"false","comment":""},{"name":"questionnaire","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"eligibility_criteria","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"observations","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"interventions","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"consent","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"schedule","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"report_specification","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"results","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""},{"name":"user_id","type":"uuid","nullable":false,"default":null,"comment":"UserId of study creator"},{"name":"participation","type":"participation","nullable":false,"default":"'invite'::participation","comment":""},{"name":"result_sharing","type":"result_sharing","nullable":false,"default":"'private'::result_sharing","comment":""},{"name":"collaborator_emails","type":"text[]","nullable":false,"default":"'{}'::text[]","comment":""}],"indexes":[{"name":"study_id_key","def":"CREATE UNIQUE INDEX study_id_key ON public.study USING btree (id)","table":"public.study","columns":["id"],"comment":""},{"name":"study_pkey","def":"CREATE UNIQUE INDEX study_pkey ON public.study USING btree (id)","table":"public.study","columns":["id"],"comment":""}],"constraints":[{"name":"study_id_key","type":"UNIQUE","def":"UNIQUE (id)","table":"public.study","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"study_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"public.study","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"study_userId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id)","table":"public.study","referenced_table":"user","columns":["user_id"],"referenced_columns":["id"],"comment":""}],"triggers":[{"name":"handle_updated_at","def":"CREATE TRIGGER handle_updated_at BEFORE UPDATE ON public.study FOR EACH ROW EXECUTE FUNCTION moddatetime('updated_at')","comment":""}],"def":""},{"name":"public.study_subject","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"uuid","nullable":false,"default":"gen_random_uuid()","comment":""},{"name":"study_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"user_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"started_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"selected_intervention_ids","type":"text[]","nullable":false,"default":null,"comment":""},{"name":"invite_code","type":"text","nullable":true,"default":null,"comment":""},{"name":"is_deleted","type":"boolean","nullable":false,"default":"false","comment":""}],"indexes":[{"name":"study_subject_pkey","def":"CREATE UNIQUE INDEX study_subject_pkey ON public.study_subject USING btree (id)","table":"public.study_subject","columns":["id"],"comment":""}],"constraints":[{"name":"study_subject_studyId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (study_id) REFERENCES study(id) ON DELETE CASCADE","table":"public.study_subject","referenced_table":"study","columns":["study_id"],"referenced_columns":["id"],"comment":""},{"name":"study_subject_loginCode_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (invite_code) REFERENCES study_invite(code) ON DELETE CASCADE","table":"public.study_subject","referenced_table":"study_invite","columns":["invite_code"],"referenced_columns":["code"],"comment":""},{"name":"study_subject_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"public.study_subject","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"study_subject_userId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id)","table":"public.study_subject","referenced_table":"user","columns":["user_id"],"referenced_columns":["id"],"comment":""}],"triggers":[],"def":""},{"name":"public.app_config","type":"BASE TABLE","comment":"Stores app config for different envs","columns":[{"name":"id","type":"text","nullable":false,"default":null,"comment":""},{"name":"app_min_version","type":"text","nullable":false,"default":"'0.0.0'::text","comment":""},{"name":"app_playstore_url","type":"text","nullable":false,"default":"'https://play.google.com/store/apps/details?id=health.studyu.app'::text","comment":""},{"name":"app_appstore_url","type":"text","nullable":false,"default":"'https://itunes.apple.com/app/id1571991198'::text","comment":""},{"name":"app_privacy","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"app_terms","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"designer_privacy","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"designer_terms","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"imprint","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"contact","type":"jsonb","nullable":false,"default":"'{\"email\": \"hpi-info@hpi.de\", \"phone\": \"+49-(0)331 5509-0\", \"website\": \"https://hpi.de/\", \"organization\": \"Hasso Plattner Institute\"}'::jsonb","comment":""},{"name":"analytics","type":"jsonb","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"AppConfig_pkey","def":"CREATE UNIQUE INDEX \"AppConfig_pkey\" ON public.app_config USING btree (id)","table":"public.app_config","columns":["id"],"comment":""}],"constraints":[{"name":"AppConfig_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"public.app_config","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"public.repo","type":"BASE TABLE","comment":"Git repo where the generated project is stored","columns":[{"name":"project_id","type":"text","nullable":false,"default":null,"comment":""},{"name":"user_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"study_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"provider","type":"git_provider","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"repo_pkey","def":"CREATE UNIQUE INDEX repo_pkey ON public.repo USING btree (project_id)","table":"public.repo","columns":["project_id"],"comment":""}],"constraints":[{"name":"repo_studyId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (study_id) REFERENCES study(id)","table":"public.repo","referenced_table":"study","columns":["study_id"],"referenced_columns":["id"],"comment":""},{"name":"repo_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (project_id)","table":"public.repo","referenced_table":"","columns":["project_id"],"referenced_columns":[],"comment":""},{"name":"repo_userId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id) ON DELETE CASCADE","table":"public.repo","referenced_table":"user","columns":["user_id"],"referenced_columns":["id"],"comment":""}],"triggers":[],"def":""},{"name":"public.study_invite","type":"BASE TABLE","comment":"Study invite codes","columns":[{"name":"code","type":"text","nullable":false,"default":null,"comment":""},{"name":"study_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"preselected_intervention_ids","type":"text[]","nullable":true,"default":null,"comment":"Intervention Ids (and order) preselected by study creator"}],"indexes":[{"name":"study_invite_pkey","def":"CREATE UNIQUE INDEX study_invite_pkey ON public.study_invite USING btree (code)","table":"public.study_invite","columns":["code"],"comment":""}],"constraints":[{"name":"study_invite_studyId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (study_id) REFERENCES study(id) ON DELETE CASCADE","table":"public.study_invite","referenced_table":"study","columns":["study_id"],"referenced_columns":["id"],"comment":""},{"name":"study_invite_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (code)","table":"public.study_invite","referenced_table":"","columns":["code"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"public.subject_progress","type":"BASE TABLE","comment":"","columns":[{"name":"completed_at","type":"timestamp with time zone","nullable":false,"default":"timezone('utc'::text, now())","comment":""},{"name":"subject_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"intervention_id","type":"text","nullable":false,"default":null,"comment":""},{"name":"task_id","type":"text","nullable":false,"default":null,"comment":""},{"name":"result_type","type":"text","nullable":false,"default":null,"comment":""},{"name":"result","type":"jsonb","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"participant_progress_pkey","def":"CREATE UNIQUE INDEX participant_progress_pkey ON public.subject_progress USING btree (completed_at, subject_id)","table":"public.subject_progress","columns":["completed_at","subject_id"],"comment":""}],"constraints":[{"name":"participant_progress_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (completed_at, subject_id)","table":"public.subject_progress","referenced_table":"","columns":["completed_at","subject_id"],"referenced_columns":[],"comment":""},{"name":"participant_progress_subjectId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (subject_id) REFERENCES study_subject(id) ON DELETE CASCADE","table":"public.subject_progress","referenced_table":"study_subject","columns":["subject_id"],"referenced_columns":["id"],"comment":""}],"triggers":[],"def":""},{"name":"public.study_progress_export","type":"VIEW","comment":"","columns":[{"name":"completed_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"intervention_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"task_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"result_type","type":"text","nullable":true,"default":null,"comment":""},{"name":"result","type":"jsonb","nullable":true,"default":null,"comment":""},{"name":"subject_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"user_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"study_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"started_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"selected_intervention_ids","type":"text[]","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW study_progress_export AS (\n SELECT subject_progress.completed_at,\n subject_progress.intervention_id,\n subject_progress.task_id,\n subject_progress.result_type,\n subject_progress.result,\n subject_progress.subject_id,\n study_subject.user_id,\n study_subject.study_id,\n study_subject.started_at,\n study_subject.selected_intervention_ids\n FROM study_subject,\n subject_progress\n WHERE (study_subject.id = subject_progress.subject_id)\n)","referenced_tables":["public.study_subject"]},{"name":"public.user","type":"BASE TABLE","comment":"Users get automatically added, when a new user is created in auth.users","columns":[{"name":"id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"email","type":"text","nullable":true,"default":null,"comment":""},{"name":"preferences","type":"jsonb","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"user_pkey","def":"CREATE UNIQUE INDEX user_pkey ON public.\"user\" USING btree (id)","table":"public.user","columns":["id"],"comment":""}],"constraints":[{"name":"user_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"public.user","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"extensions.pg_stat_statements_info","type":"VIEW","comment":"","columns":[{"name":"dealloc","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"stats_reset","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW pg_stat_statements_info AS (\n SELECT pg_stat_statements_info.dealloc,\n pg_stat_statements_info.stats_reset\n FROM pg_stat_statements_info() pg_stat_statements_info(dealloc, stats_reset)\n)","referenced_tables":["pg_stat_statements_info"]},{"name":"extensions.pg_stat_statements","type":"VIEW","comment":"","columns":[{"name":"userid","type":"oid","nullable":true,"default":null,"comment":""},{"name":"dbid","type":"oid","nullable":true,"default":null,"comment":""},{"name":"toplevel","type":"boolean","nullable":true,"default":null,"comment":""},{"name":"queryid","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"query","type":"text","nullable":true,"default":null,"comment":""},{"name":"plans","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"total_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"min_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"max_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"mean_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"stddev_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"calls","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"total_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"min_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"max_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"mean_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"stddev_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"rows","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"shared_blks_hit","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"shared_blks_read","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"shared_blks_dirtied","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"shared_blks_written","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"local_blks_hit","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"local_blks_read","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"local_blks_dirtied","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"local_blks_written","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"temp_blks_read","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"temp_blks_written","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"blk_read_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"blk_write_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"temp_blk_read_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"temp_blk_write_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"wal_records","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"wal_fpi","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"wal_bytes","type":"numeric","nullable":true,"default":null,"comment":""},{"name":"jit_functions","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"jit_generation_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"jit_inlining_count","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"jit_inlining_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"jit_optimization_count","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"jit_optimization_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"jit_emission_count","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"jit_emission_time","type":"double precision","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW pg_stat_statements AS (\n SELECT pg_stat_statements.userid,\n pg_stat_statements.dbid,\n pg_stat_statements.toplevel,\n pg_stat_statements.queryid,\n pg_stat_statements.query,\n pg_stat_statements.plans,\n pg_stat_statements.total_plan_time,\n pg_stat_statements.min_plan_time,\n pg_stat_statements.max_plan_time,\n pg_stat_statements.mean_plan_time,\n pg_stat_statements.stddev_plan_time,\n pg_stat_statements.calls,\n pg_stat_statements.total_exec_time,\n pg_stat_statements.min_exec_time,\n pg_stat_statements.max_exec_time,\n pg_stat_statements.mean_exec_time,\n pg_stat_statements.stddev_exec_time,\n pg_stat_statements.rows,\n pg_stat_statements.shared_blks_hit,\n pg_stat_statements.shared_blks_read,\n pg_stat_statements.shared_blks_dirtied,\n pg_stat_statements.shared_blks_written,\n pg_stat_statements.local_blks_hit,\n pg_stat_statements.local_blks_read,\n pg_stat_statements.local_blks_dirtied,\n pg_stat_statements.local_blks_written,\n pg_stat_statements.temp_blks_read,\n pg_stat_statements.temp_blks_written,\n pg_stat_statements.blk_read_time,\n pg_stat_statements.blk_write_time,\n pg_stat_statements.temp_blk_read_time,\n pg_stat_statements.temp_blk_write_time,\n pg_stat_statements.wal_records,\n pg_stat_statements.wal_fpi,\n pg_stat_statements.wal_bytes,\n pg_stat_statements.jit_functions,\n pg_stat_statements.jit_generation_time,\n pg_stat_statements.jit_inlining_count,\n pg_stat_statements.jit_inlining_time,\n pg_stat_statements.jit_optimization_count,\n pg_stat_statements.jit_optimization_time,\n pg_stat_statements.jit_emission_count,\n pg_stat_statements.jit_emission_time\n FROM pg_stat_statements(true) pg_stat_statements(userid, dbid, toplevel, queryid, query, plans, total_plan_time, min_plan_time, max_plan_time, mean_plan_time, stddev_plan_time, calls, total_exec_time, min_exec_time, max_exec_time, mean_exec_time, stddev_exec_time, rows, shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written, local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written, temp_blks_read, temp_blks_written, blk_read_time, blk_write_time, temp_blk_read_time, temp_blk_write_time, wal_records, wal_fpi, wal_bytes, jit_functions, jit_generation_time, jit_inlining_count, jit_inlining_time, jit_optimization_count, jit_optimization_time, jit_emission_count, jit_emission_time)\n)","referenced_tables":["pg_stat_statements"]},{"name":"pgsodium.key","type":"BASE TABLE","comment":"This table holds metadata for derived keys given a key_id and key_context. The raw key is never stored.","columns":[{"name":"id","type":"uuid","nullable":false,"default":"gen_random_uuid()","comment":""},{"name":"status","type":"pgsodium.key_status","nullable":true,"default":"'valid'::pgsodium.key_status","comment":""},{"name":"created","type":"timestamp with time zone","nullable":false,"default":"CURRENT_TIMESTAMP","comment":""},{"name":"expires","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"key_type","type":"pgsodium.key_type","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"bigint","nullable":true,"default":"nextval('pgsodium.key_key_id_seq'::regclass)","comment":""},{"name":"key_context","type":"bytea","nullable":true,"default":"'\\x7067736f6469756d'::bytea","comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"associated_data","type":"text","nullable":true,"default":"'associated'::text","comment":""},{"name":"raw_key","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"raw_key_nonce","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"parent_key","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"comment","type":"text","nullable":true,"default":null,"comment":""},{"name":"user_data","type":"text","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"key_pkey","def":"CREATE UNIQUE INDEX key_pkey ON pgsodium.key USING btree (id)","table":"pgsodium.key","columns":["id"],"comment":""},{"name":"key_status_idx","def":"CREATE INDEX key_status_idx ON pgsodium.key USING btree (status) WHERE (status = ANY (ARRAY['valid'::pgsodium.key_status, 'default'::pgsodium.key_status]))","table":"pgsodium.key","columns":["status"],"comment":""},{"name":"key_status_idx1","def":"CREATE UNIQUE INDEX key_status_idx1 ON pgsodium.key USING btree (status) WHERE (status = 'default'::pgsodium.key_status)","table":"pgsodium.key","columns":["status"],"comment":""},{"name":"key_key_id_key_context_key_type_idx","def":"CREATE UNIQUE INDEX key_key_id_key_context_key_type_idx ON pgsodium.key USING btree (key_id, key_context, key_type)","table":"pgsodium.key","columns":["key_context","key_id","key_type"],"comment":""},{"name":"pgsodium_key_unique_name","def":"CREATE UNIQUE INDEX pgsodium_key_unique_name ON pgsodium.key USING btree (name)","table":"pgsodium.key","columns":["name"],"comment":""}],"constraints":[{"name":"key_key_context_check","type":"CHECK","def":"CHECK ((length(key_context) = 8))","table":"pgsodium.key","referenced_table":"","columns":["key_context"],"referenced_columns":[],"comment":""},{"name":"pgsodium_raw","type":"CHECK","def":"CHECK (\nCASE\n WHEN (raw_key IS NOT NULL) THEN ((key_id IS NULL) AND (key_context IS NULL) AND (parent_key IS NOT NULL))\n ELSE ((key_id IS NOT NULL) AND (key_context IS NOT NULL) AND (parent_key IS NULL))\nEND)","table":"pgsodium.key","referenced_table":"","columns":["key_id","key_context","raw_key","parent_key"],"referenced_columns":[],"comment":""},{"name":"key_parent_key_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (parent_key) REFERENCES pgsodium.key(id)","table":"pgsodium.key","referenced_table":"key","columns":["parent_key"],"referenced_columns":["id"],"comment":""},{"name":"key_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"pgsodium.key","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"pgsodium_key_unique_name","type":"UNIQUE","def":"UNIQUE (name)","table":"pgsodium.key","referenced_table":"","columns":["name"],"referenced_columns":[],"comment":""}],"triggers":[{"name":"key_encrypt_secret_trigger_raw_key","def":"CREATE TRIGGER key_encrypt_secret_trigger_raw_key BEFORE INSERT OR UPDATE OF raw_key ON pgsodium.key FOR EACH ROW EXECUTE FUNCTION pgsodium.key_encrypt_secret_raw_key()","comment":""}],"def":""},{"name":"pgsodium.valid_key","type":"VIEW","comment":"","columns":[{"name":"id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"status","type":"pgsodium.key_status","nullable":true,"default":null,"comment":""},{"name":"key_type","type":"pgsodium.key_type","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"key_context","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"created","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"expires","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"associated_data","type":"text","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW valid_key AS (\n SELECT key.id,\n key.name,\n key.status,\n key.key_type,\n key.key_id,\n key.key_context,\n key.created,\n key.expires,\n key.associated_data\n FROM pgsodium.key\n WHERE ((key.status = ANY (ARRAY['valid'::pgsodium.key_status, 'default'::pgsodium.key_status])) AND\n CASE\n WHEN (key.expires IS NULL) THEN true\n ELSE (key.expires \u003e now())\n END)\n)","referenced_tables":["pgsodium.key"]},{"name":"pgsodium.masking_rule","type":"VIEW","comment":"","columns":[{"name":"attrelid","type":"oid","nullable":true,"default":null,"comment":""},{"name":"attnum","type":"integer","nullable":true,"default":null,"comment":""},{"name":"relnamespace","type":"regnamespace","nullable":true,"default":null,"comment":""},{"name":"relname","type":"name","nullable":true,"default":null,"comment":""},{"name":"attname","type":"name","nullable":true,"default":null,"comment":""},{"name":"format_type","type":"text","nullable":true,"default":null,"comment":""},{"name":"col_description","type":"text","nullable":true,"default":null,"comment":""},{"name":"key_id_column","type":"text","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"associated_columns","type":"text","nullable":true,"default":null,"comment":""},{"name":"nonce_column","type":"text","nullable":true,"default":null,"comment":""},{"name":"view_name","type":"text","nullable":true,"default":null,"comment":""},{"name":"priority","type":"integer","nullable":true,"default":null,"comment":""},{"name":"security_invoker","type":"boolean","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW masking_rule AS (\n WITH const AS (\n SELECT 'encrypt +with +key +id +([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'::text AS pattern_key_id,\n 'encrypt +with +key +column +([\\w\\\"\\-$]+)'::text AS pattern_key_id_column,\n '(?\u003c=associated) +\\(([\\w\\\"\\-$, ]+)\\)'::text AS pattern_associated_columns,\n '(?\u003c=nonce) +([\\w\\\"\\-$]+)'::text AS pattern_nonce_column,\n '(?\u003c=decrypt with view) +([\\w\\\"\\-$]+\\.[\\w\\\"\\-$]+)'::text AS pattern_view_name,\n '(?\u003c=security invoker)'::text AS pattern_security_invoker\n ), rules_from_seclabels AS (\n SELECT sl.objoid AS attrelid,\n sl.objsubid AS attnum,\n (c.relnamespace)::regnamespace AS relnamespace,\n c.relname,\n a.attname,\n format_type(a.atttypid, a.atttypmod) AS format_type,\n sl.label AS col_description,\n (regexp_match(sl.label, k.pattern_key_id_column, 'i'::text))[1] AS key_id_column,\n (regexp_match(sl.label, k.pattern_key_id, 'i'::text))[1] AS key_id,\n (regexp_match(sl.label, k.pattern_associated_columns, 'i'::text))[1] AS associated_columns,\n (regexp_match(sl.label, k.pattern_nonce_column, 'i'::text))[1] AS nonce_column,\n COALESCE((regexp_match(sl2.label, k.pattern_view_name, 'i'::text))[1], (((c.relnamespace)::regnamespace || '.'::text) || quote_ident(('decrypted_'::text || (c.relname)::text)))) AS view_name,\n 100 AS priority,\n ((regexp_match(sl.label, k.pattern_security_invoker, 'i'::text))[1] IS NOT NULL) AS security_invoker\n FROM const k,\n (((pg_seclabel sl\n JOIN pg_class c ON (((sl.classoid = c.tableoid) AND (sl.objoid = c.oid))))\n JOIN pg_attribute a ON (((a.attrelid = c.oid) AND (sl.objsubid = a.attnum))))\n LEFT JOIN pg_seclabel sl2 ON (((sl2.objoid = c.oid) AND (sl2.objsubid = 0))))\n WHERE ((a.attnum \u003e 0) AND (((c.relnamespace)::regnamespace)::oid \u003c\u003e ('pg_catalog'::regnamespace)::oid) AND (NOT a.attisdropped) AND (sl.label ~~* 'ENCRYPT%'::text) AND (sl.provider = 'pgsodium'::text))\n )\n SELECT DISTINCT ON (rules_from_seclabels.attrelid, rules_from_seclabels.attnum) rules_from_seclabels.attrelid,\n rules_from_seclabels.attnum,\n rules_from_seclabels.relnamespace,\n rules_from_seclabels.relname,\n rules_from_seclabels.attname,\n rules_from_seclabels.format_type,\n rules_from_seclabels.col_description,\n rules_from_seclabels.key_id_column,\n rules_from_seclabels.key_id,\n rules_from_seclabels.associated_columns,\n rules_from_seclabels.nonce_column,\n rules_from_seclabels.view_name,\n rules_from_seclabels.priority,\n rules_from_seclabels.security_invoker\n FROM rules_from_seclabels\n ORDER BY rules_from_seclabels.attrelid, rules_from_seclabels.attnum, rules_from_seclabels.priority DESC\n)"},{"name":"pgsodium.mask_columns","type":"VIEW","comment":"","columns":[{"name":"attname","type":"name","nullable":true,"default":null,"comment":""},{"name":"attrelid","type":"oid","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"key_id_column","type":"text","nullable":true,"default":null,"comment":""},{"name":"associated_columns","type":"text","nullable":true,"default":null,"comment":""},{"name":"nonce_column","type":"text","nullable":true,"default":null,"comment":""},{"name":"format_type","type":"text","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW mask_columns AS (\n SELECT a.attname,\n a.attrelid,\n m.key_id,\n m.key_id_column,\n m.associated_columns,\n m.nonce_column,\n m.format_type\n FROM (pg_attribute a\n LEFT JOIN pgsodium.masking_rule m ON (((m.attrelid = a.attrelid) AND (m.attname = a.attname))))\n WHERE ((a.attnum \u003e 0) AND (NOT a.attisdropped))\n ORDER BY a.attnum\n)","referenced_tables":["pg_attribute","pgsodium.masking_rule"]},{"name":"pgsodium.decrypted_key","type":"VIEW","comment":"","columns":[{"name":"id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"status","type":"pgsodium.key_status","nullable":true,"default":null,"comment":""},{"name":"created","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"expires","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"key_type","type":"pgsodium.key_type","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"key_context","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"associated_data","type":"text","nullable":true,"default":null,"comment":""},{"name":"raw_key","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"decrypted_raw_key","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"raw_key_nonce","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"parent_key","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"comment","type":"text","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW decrypted_key AS (\n SELECT key.id,\n key.status,\n key.created,\n key.expires,\n key.key_type,\n key.key_id,\n key.key_context,\n key.name,\n key.associated_data,\n key.raw_key,\n CASE\n WHEN (key.raw_key IS NULL) THEN NULL::bytea\n ELSE\n CASE\n WHEN (key.parent_key IS NULL) THEN NULL::bytea\n ELSE pgsodium.crypto_aead_det_decrypt(key.raw_key, convert_to(((key.id)::text || key.associated_data), 'utf8'::name), key.parent_key, key.raw_key_nonce)\n END\n END AS decrypted_raw_key,\n key.raw_key_nonce,\n key.parent_key,\n key.comment\n FROM pgsodium.key\n)","referenced_tables":["pgsodium.key"]},{"name":"vault.secrets","type":"BASE TABLE","comment":"Table with encrypted `secret` column for storing sensitive information on disk.","columns":[{"name":"id","type":"uuid","nullable":false,"default":"gen_random_uuid()","comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"description","type":"text","nullable":false,"default":"''::text","comment":""},{"name":"secret","type":"text","nullable":false,"default":null,"comment":""},{"name":"key_id","type":"uuid","nullable":true,"default":"(pgsodium.create_key()).id","comment":""},{"name":"nonce","type":"bytea","nullable":true,"default":"pgsodium.crypto_aead_det_noncegen()","comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":false,"default":"CURRENT_TIMESTAMP","comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":false,"default":"CURRENT_TIMESTAMP","comment":""}],"indexes":[{"name":"secrets_pkey","def":"CREATE UNIQUE INDEX secrets_pkey ON vault.secrets USING btree (id)","table":"vault.secrets","columns":["id"],"comment":""},{"name":"secrets_name_idx","def":"CREATE UNIQUE INDEX secrets_name_idx ON vault.secrets USING btree (name) WHERE (name IS NOT NULL)","table":"vault.secrets","columns":["name"],"comment":""}],"constraints":[{"name":"secrets_key_id_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (key_id) REFERENCES pgsodium.key(id)","table":"vault.secrets","referenced_table":"key","columns":["key_id"],"referenced_columns":["id"],"comment":""},{"name":"secrets_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"vault.secrets","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[{"name":"secrets_encrypt_secret_trigger_secret","def":"CREATE TRIGGER secrets_encrypt_secret_trigger_secret BEFORE INSERT OR UPDATE OF secret ON vault.secrets FOR EACH ROW EXECUTE FUNCTION vault.secrets_encrypt_secret_secret()","comment":""}],"def":""},{"name":"vault.decrypted_secrets","type":"VIEW","comment":"","columns":[{"name":"id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"description","type":"text","nullable":true,"default":null,"comment":""},{"name":"secret","type":"text","nullable":true,"default":null,"comment":""},{"name":"decrypted_secret","type":"text","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"nonce","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW decrypted_secrets AS (\n SELECT secrets.id,\n secrets.name,\n secrets.description,\n secrets.secret,\n CASE\n WHEN (secrets.secret IS NULL) THEN NULL::text\n ELSE\n CASE\n WHEN (secrets.key_id IS NULL) THEN NULL::text\n 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)\n END\n END AS decrypted_secret,\n secrets.key_id,\n secrets.nonce,\n secrets.created_at,\n secrets.updated_at\n FROM vault.secrets\n)","referenced_tables":["vault.secrets"]}],"relations":[{"table":"storage.buckets","columns":["owner"],"cardinality":"Zero or more","parent_table":"auth.users","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (owner) REFERENCES auth.users(id)","virtual":false},{"table":"storage.objects","columns":["owner"],"cardinality":"Zero or more","parent_table":"auth.users","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (owner) REFERENCES auth.users(id)","virtual":false},{"table":"storage.objects","columns":["bucket_id"],"cardinality":"Zero or more","parent_table":"storage.buckets","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id)","virtual":false},{"table":"public.study","columns":["user_id"],"cardinality":"Zero or more","parent_table":"public.user","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id)","virtual":false},{"table":"public.study_subject","columns":["study_id"],"cardinality":"Zero or more","parent_table":"public.study","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (study_id) REFERENCES study(id) ON DELETE CASCADE","virtual":false},{"table":"public.study_subject","columns":["invite_code"],"cardinality":"Zero or more","parent_table":"public.study_invite","parent_columns":["code"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (invite_code) REFERENCES study_invite(code) ON DELETE CASCADE","virtual":false},{"table":"public.study_subject","columns":["user_id"],"cardinality":"Zero or more","parent_table":"public.user","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id)","virtual":false},{"table":"public.repo","columns":["study_id"],"cardinality":"Zero or more","parent_table":"public.study","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (study_id) REFERENCES study(id)","virtual":false},{"table":"public.repo","columns":["user_id"],"cardinality":"Zero or more","parent_table":"public.user","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id) ON DELETE CASCADE","virtual":false},{"table":"public.study_invite","columns":["study_id"],"cardinality":"Zero or more","parent_table":"public.study","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (study_id) REFERENCES study(id) ON DELETE CASCADE","virtual":false},{"table":"public.subject_progress","columns":["subject_id"],"cardinality":"Zero or more","parent_table":"public.study_subject","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (subject_id) REFERENCES study_subject(id) ON DELETE CASCADE","virtual":false},{"table":"pgsodium.key","columns":["parent_key"],"cardinality":"Zero or more","parent_table":"pgsodium.key","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (parent_key) REFERENCES pgsodium.key(id)","virtual":false},{"table":"vault.secrets","columns":["key_id"],"cardinality":"Zero or more","parent_table":"pgsodium.key","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (key_id) REFERENCES pgsodium.key(id)","virtual":false}],"functions":[{"name":"extensions.uuid_generate_v4","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"pgbouncer.get_auth","return_type":"record","arguments":"p_usename text","type":"FUNCTION"},{"name":"storage.filename","return_type":"text","arguments":"name text","type":"FUNCTION"},{"name":"extensions.digest","return_type":"bytea","arguments":"text, text","type":"FUNCTION"},{"name":"storage.foldername","return_type":"_text","arguments":"name text","type":"FUNCTION"},{"name":"extensions.decrypt_iv","return_type":"bytea","arguments":"bytea, bytea, bytea, text","type":"FUNCTION"},{"name":"storage.extension","return_type":"text","arguments":"name text","type":"FUNCTION"},{"name":"extensions.gen_random_bytes","return_type":"bytea","arguments":"integer","type":"FUNCTION"},{"name":"extensions.encrypt","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.decrypt","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.encrypt_iv","return_type":"bytea","arguments":"bytea, bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.gen_random_uuid","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_nil","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_ns_dns","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"storage.search","return_type":"record","arguments":"prefix text, bucketname text, limits integer DEFAULT 100, levels integer DEFAULT 1, offsets integer DEFAULT 0","type":"FUNCTION"},{"name":"extensions.uuid_ns_url","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_ns_oid","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"auth.uid","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"auth.email","return_type":"text","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_generate_v3","return_type":"uuid","arguments":"namespace uuid, name text","type":"FUNCTION"},{"name":"extensions.uuid_ns_x500","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_generate_v1","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_generate_v1mc","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"net.check_worker_is_up","return_type":"void","arguments":"","type":"FUNCTION"},{"name":"net._await_response","return_type":"bool","arguments":"request_id bigint","type":"FUNCTION"},{"name":"net._urlencode_string","return_type":"text","arguments":"string character varying","type":"FUNCTION"},{"name":"net._encode_url_with_params_array","return_type":"text","arguments":"url text, params_array text[]","type":"FUNCTION"},{"name":"graphql.increment_schema_version","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"graphql.get_schema_version","return_type":"int4","arguments":"","type":"FUNCTION"},{"name":"graphql.resolve","return_type":"jsonb","arguments":"query text, variables jsonb DEFAULT '{}'::jsonb, \"operationName\" text DEFAULT NULL::text, extensions jsonb DEFAULT NULL::jsonb","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt_bytea","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt","return_type":"text","arguments":"bytea, bytea, text, text","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt_bytea","return_type":"bytea","arguments":"bytea, bytea, text, text","type":"FUNCTION"},{"name":"net.http_delete","return_type":"int8","arguments":"url text, params jsonb DEFAULT '{}'::jsonb, headers jsonb DEFAULT '{}'::jsonb, timeout_milliseconds integer DEFAULT 2000","type":"FUNCTION"},{"name":"net._http_collect_response","return_type":"http_response_result","arguments":"request_id bigint, async boolean DEFAULT true","type":"FUNCTION"},{"name":"net.http_collect_response","return_type":"http_response_result","arguments":"request_id bigint, async boolean DEFAULT true","type":"FUNCTION"},{"name":"supabase_functions.http_request","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"public.active_subject_count","return_type":"int4","arguments":"study study","type":"FUNCTION"},{"name":"public.can_edit","return_type":"bool","arguments":"user_id uuid, study_param study","type":"FUNCTION"},{"name":"public.get_study_from_invite","return_type":"record","arguments":"invite_code text","type":"FUNCTION"},{"name":"public.get_study_record_from_invite","return_type":"study","arguments":"invite_code text","type":"FUNCTION"},{"name":"public.handle_new_user","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"public.has_study_ended","return_type":"bool","arguments":"psubject_id uuid","type":"FUNCTION"},{"name":"public.has_results_public","return_type":"bool","arguments":"psubject_id uuid","type":"FUNCTION"},{"name":"public.has_study_ended","return_type":"bool","arguments":"subject study_subject","type":"FUNCTION"},{"name":"public.is_active_subject","return_type":"bool","arguments":"psubject_id uuid, days_active integer","type":"FUNCTION"},{"name":"public.is_study_subject_of","return_type":"bool","arguments":"_user_id uuid, _study_id uuid","type":"FUNCTION"},{"name":"public.last_completed_task","return_type":"date","arguments":"psubject_id uuid","type":"FUNCTION"},{"name":"public.study_active_days","return_type":"_int4","arguments":"study_param study","type":"FUNCTION"},{"name":"public.study_ended_count","return_type":"int4","arguments":"study study","type":"FUNCTION"},{"name":"public.study_length","return_type":"int4","arguments":"study_param study","type":"FUNCTION"},{"name":"public.study_missed_days","return_type":"_int4","arguments":"study_param study","type":"FUNCTION"},{"name":"net.http_get","return_type":"int8","arguments":"url text, params jsonb DEFAULT '{}'::jsonb, headers jsonb DEFAULT '{}'::jsonb, timeout_milliseconds integer DEFAULT 2000","type":"FUNCTION"},{"name":"extensions.pgp_sym_decrypt_bytea","return_type":"bytea","arguments":"bytea, text, text","type":"FUNCTION"},{"name":"public.study_participant_count","return_type":"int4","arguments":"study study","type":"FUNCTION"},{"name":"public.study_total_tasks","return_type":"int4","arguments":"subject study_subject","type":"FUNCTION"},{"name":"public.subject_current_day","return_type":"int4","arguments":"subject study_subject","type":"FUNCTION"},{"name":"public.subject_total_active_days","return_type":"int4","arguments":"subject study_subject","type":"FUNCTION"},{"name":"public.user_email","return_type":"text","arguments":"user_id uuid","type":"FUNCTION"},{"name":"extensions.pgp_pub_encrypt","return_type":"bytea","arguments":"text, bytea","type":"FUNCTION"},{"name":"extensions.pgp_pub_encrypt_bytea","return_type":"bytea","arguments":"bytea, bytea","type":"FUNCTION"},{"name":"extensions.pgp_pub_encrypt","return_type":"bytea","arguments":"text, bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_pub_encrypt_bytea","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt","return_type":"text","arguments":"bytea, bytea","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt_bytea","return_type":"bytea","arguments":"bytea, bytea","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt","return_type":"text","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.gen_salt","return_type":"text","arguments":"text, integer","type":"FUNCTION"},{"name":"auth.role","return_type":"text","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_generate_v5","return_type":"uuid","arguments":"namespace uuid, name text","type":"FUNCTION"},{"name":"extensions.digest","return_type":"bytea","arguments":"bytea, text","type":"FUNCTION"},{"name":"extensions.hmac","return_type":"bytea","arguments":"text, text, text","type":"FUNCTION"},{"name":"extensions.hmac","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.crypt","return_type":"text","arguments":"text, text","type":"FUNCTION"},{"name":"extensions.gen_salt","return_type":"text","arguments":"text","type":"FUNCTION"},{"name":"extensions.sign","return_type":"text","arguments":"payload json, secret text, algorithm text DEFAULT 'HS256'::text","type":"FUNCTION"},{"name":"extensions.pgrst_ddl_watch","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"graphql._internal_resolve","return_type":"jsonb","arguments":"query text, variables jsonb DEFAULT '{}'::jsonb, \"operationName\" text DEFAULT NULL::text, extensions jsonb DEFAULT NULL::jsonb","type":"FUNCTION"},{"name":"graphql.exception","return_type":"text","arguments":"message text","type":"FUNCTION"},{"name":"graphql.comment_directive","return_type":"jsonb","arguments":"comment_ text","type":"FUNCTION"},{"name":"extensions.pgrst_drop_watch","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"graphql_public.graphql","return_type":"jsonb","arguments":"\"operationName\" text DEFAULT NULL::text, query text DEFAULT NULL::text, variables jsonb DEFAULT NULL::jsonb, extensions jsonb DEFAULT NULL::jsonb","type":"FUNCTION"},{"name":"extensions.grant_pg_graphql_access","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"net.http_post","return_type":"int8","arguments":"url text, body jsonb DEFAULT '{}'::jsonb, params jsonb DEFAULT '{}'::jsonb, headers jsonb DEFAULT '{\"Content-Type\": \"application/json\"}'::jsonb, timeout_milliseconds integer DEFAULT 2000","type":"FUNCTION"},{"name":"pgsodium.crypto_pwhash_saltgen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_client_session_keys","return_type":"crypto_kx_session","arguments":"client_pk bytea, client_sk bytea, server_pk bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_server_session_keys","return_type":"crypto_kx_session","arguments":"server_pk bytea, server_sk bytea, client_pk bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_box_new_seed","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_new_seed","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.derive_key","return_type":"bytea","arguments":"key_id bigint, key_len integer DEFAULT 32, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.pgsodium_derive","return_type":"bytea","arguments":"key_id bigint, key_len integer DEFAULT 32, context bytea DEFAULT decode('pgsodium'::text, 'escape'::text)","type":"FUNCTION"},{"name":"pgsodium.randombytes_new_seed","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_box_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_shorthash_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_generichash_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kdf_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_new_keypair","return_type":"crypto_kx_keypair","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_new_seed","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_seed_new_keypair","return_type":"crypto_kx_keypair","arguments":"seed bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_box_new_keypair","return_type":"crypto_box_keypair","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_new_keypair","return_type":"crypto_sign_keypair","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_init","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_update","return_type":"bytea","arguments":"state bytea, message bytea","type":"FUNCTION"},{"name":"pgsodium.randombytes_random","return_type":"int4","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_secretstream_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_cmp","return_type":"bool","arguments":"text, text","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_new_keypair","return_type":"crypto_signcrypt_keypair","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key bytea, nonce bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_decrypt","return_type":"bytea","arguments":"ciphertext bytea, additional bytea, key bytea, nonce bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea, nonce bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea, nonce bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.version","return_type":"text","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.has_mask","return_type":"bool","arguments":"role regrole, source_name text","type":"FUNCTION"},{"name":"pgsodium.mask_columns","return_type":"record","arguments":"source_relid oid","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_final_verify","return_type":"bool","arguments":"state bytea, signature bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.create_mask_view","return_type":"void","arguments":"relid oid, debug boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.create_key","return_type":"valid_key","arguments":"key_type pgsodium.key_type DEFAULT 'aead-det'::pgsodium.key_type, name text DEFAULT NULL::text, raw_key bytea DEFAULT NULL::bytea, raw_key_nonce bytea DEFAULT NULL::bytea, parent_key uuid DEFAULT NULL::uuid, key_context bytea DEFAULT '\\x7067736f6469756d'::bytea, expires timestamp with time zone DEFAULT NULL::timestamp with time zone, associated_data text DEFAULT ''::text","type":"FUNCTION"},{"name":"pgsodium.get_key_by_name","return_type":"valid_key","arguments":"text","type":"FUNCTION"},{"name":"pgsodium.quote_assoc","return_type":"text","arguments":"text, boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_open","return_type":"bytea","arguments":"signed_message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_kdf_derive_from_key","return_type":"bytea","arguments":"subkey_size integer, subkey_id bigint, context bytea, primary_key uuid","type":"FUNCTION"},{"name":"pgsodium.get_named_keys","return_type":"valid_key","arguments":"filter text DEFAULT '%'::text","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.get_key_by_id","return_type":"valid_key","arguments":"uuid","type":"FUNCTION"},{"name":"pgsodium.enable_security_label_trigger","return_type":"void","arguments":"","type":"FUNCTION"},{"name":"pgsodium.disable_security_label_trigger","return_type":"void","arguments":"","type":"FUNCTION"},{"name":"pgsodium.update_mask","return_type":"void","arguments":"target oid, debug boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_update_agg1","return_type":"bytea","arguments":"state bytea, message bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_update_agg2","return_type":"bytea","arguments":"cur_state bytea, initial_state bytea, message bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_update_agg","return_type":"bytea","arguments":"message bytea","type":"a"},{"name":"pgsodium.crypto_sign_update_agg","return_type":"bytea","arguments":"state bytea, message bytea","type":"a"},{"name":"pgsodium.encrypted_columns","return_type":"text","arguments":"relid oid","type":"FUNCTION"},{"name":"pgsodium.decrypted_columns","return_type":"text","arguments":"relid oid","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth","return_type":"bytea","arguments":"message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth","return_type":"bytea","arguments":"message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_verify","return_type":"bool","arguments":"mac bytea, message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_verify","return_type":"bool","arguments":"mac bytea, message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_verify","return_type":"bool","arguments":"mac bytea, message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_box_seed_new_keypair","return_type":"crypto_box_keypair","arguments":"seed bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_box","return_type":"bytea","arguments":"message bytea, nonce bytea, public bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_box_open","return_type":"bytea","arguments":"ciphertext bytea, nonce bytea, public bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_box_seal","return_type":"bytea","arguments":"message bytea, public_key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_box_seal_open","return_type":"bytea","arguments":"ciphertext bytea, public_key bytea, secret_key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_generichash","return_type":"bytea","arguments":"message bytea, key bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_generichash","return_type":"bytea","arguments":"message bytea, key bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_generichash","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_shorthash","return_type":"bytea","arguments":"message bytea, key bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_shorthash","return_type":"bytea","arguments":"message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_shorthash","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.sodium_bin2base64","return_type":"text","arguments":"bin bytea","type":"FUNCTION"},{"name":"pgsodium.sodium_base642bin","return_type":"bytea","arguments":"base64 text","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512","return_type":"bytea","arguments":"message bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512","return_type":"bytea","arguments":"message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512_verify","return_type":"bool","arguments":"hash bytea, message bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512_verify","return_type":"bool","arguments":"hash bytea, message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512_verify","return_type":"bool","arguments":"signature bytea, message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256","return_type":"bytea","arguments":"message bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256","return_type":"bytea","arguments":"message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256_verify","return_type":"bool","arguments":"hash bytea, message bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_final_create","return_type":"bytea","arguments":"state bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256_verify","return_type":"bool","arguments":"hash bytea, message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256_verify","return_type":"bool","arguments":"signature bytea, message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_kdf_derive_from_key","return_type":"bytea","arguments":"subkey_size bigint, subkey_id bigint, context bytea, primary_key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_pwhash","return_type":"bytea","arguments":"password bytea, salt bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_pwhash_str","return_type":"bytea","arguments":"password bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_pwhash_str_verify","return_type":"bool","arguments":"hashed_password bytea, password bytea","type":"FUNCTION"},{"name":"pgsodium.randombytes_uniform","return_type":"int4","arguments":"upper_bound integer","type":"FUNCTION"},{"name":"pgsodium.randombytes_buf","return_type":"bytea","arguments":"size integer","type":"FUNCTION"},{"name":"pgsodium.randombytes_buf_deterministic","return_type":"bytea","arguments":"size integer, seed bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox","return_type":"bytea","arguments":"message bytea, nonce bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox","return_type":"bytea","arguments":"message bytea, nonce bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox","return_type":"bytea","arguments":"message bytea, nonce bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_open","return_type":"bytea","arguments":"ciphertext bytea, nonce bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_open","return_type":"bytea","arguments":"message bytea, nonce bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_open","return_type":"bytea","arguments":"message bytea, nonce bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_hash_sha256","return_type":"bytea","arguments":"message bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_hash_sha512","return_type":"bytea","arguments":"message bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign","return_type":"bytea","arguments":"message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_detached","return_type":"bytea","arguments":"message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_seed_new_keypair","return_type":"crypto_sign_keypair","arguments":"seed bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_verify_detached","return_type":"bool","arguments":"sig bytea, message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_sign_after","return_type":"bytea","arguments":"state bytea, sender_sk bytea, ciphertext bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_sign_before","return_type":"crypto_signcrypt_state_key","arguments":"sender bytea, recipient bytea, sender_sk bytea, recipient_pk bytea, additional bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_verify_after","return_type":"bool","arguments":"state bytea, signature bytea, sender_pk bytea, ciphertext bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_verify_before","return_type":"crypto_signcrypt_state_key","arguments":"signature bytea, sender bytea, recipient bytea, additional bytea, sender_pk bytea, recipient_sk bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_verify_public","return_type":"bool","arguments":"signature bytea, sender bytea, recipient bytea, additional bytea, sender_pk bytea, ciphertext bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20","return_type":"bytea","arguments":"bigint, bytea, bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20","return_type":"bytea","arguments":"bigint, bytea, bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_xor","return_type":"bytea","arguments":"bytea, bytea, bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_xor","return_type":"bytea","arguments":"bytea, bytea, bigint, context bytea DEFAULT '\\x70676f736469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_xor_ic","return_type":"bytea","arguments":"bytea, bytea, bigint, bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_xor_ic","return_type":"bytea","arguments":"bytea, bytea, bigint, bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.encrypted_column","return_type":"text","arguments":"relid oid, m record","type":"FUNCTION"},{"name":"pgsodium.update_masks","return_type":"void","arguments":"debug boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.key_encrypt_secret_raw_key","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"pgsodium.mask_role","return_type":"void","arguments":"masked_role regrole, source_name text, view_name text","type":"FUNCTION"},{"name":"pgsodium.create_mask_view","return_type":"void","arguments":"relid oid, subid integer, debug boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.trg_mask_update","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_uuid uuid, nonce bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_uuid uuid, nonce bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"vault.secrets_encrypt_secret_secret","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"vault.create_secret","return_type":"uuid","arguments":"new_secret text, new_name text DEFAULT NULL::text, new_description text DEFAULT ''::text, new_key_id uuid DEFAULT NULL::uuid","type":"FUNCTION"},{"name":"vault.update_secret","return_type":"void","arguments":"secret_id uuid, new_secret text DEFAULT NULL::text, new_name text DEFAULT NULL::text, new_description text DEFAULT NULL::text, new_key_id uuid DEFAULT NULL::uuid","type":"FUNCTION"},{"name":"extensions.pgp_key_id","return_type":"text","arguments":"bytea","type":"FUNCTION"},{"name":"extensions.armor","return_type":"text","arguments":"bytea","type":"FUNCTION"},{"name":"extensions.armor","return_type":"text","arguments":"bytea, text[], text[]","type":"FUNCTION"},{"name":"extensions.dearmor","return_type":"bytea","arguments":"text","type":"FUNCTION"},{"name":"extensions.pgp_armor_headers","return_type":"record","arguments":"text, OUT key text, OUT value text","type":"FUNCTION"},{"name":"extensions.url_encode","return_type":"text","arguments":"data bytea","type":"FUNCTION"},{"name":"extensions.url_decode","return_type":"bytea","arguments":"data text","type":"FUNCTION"},{"name":"extensions.try_cast_double","return_type":"float8","arguments":"inp text","type":"FUNCTION"},{"name":"extensions.moddatetime","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"extensions.pgp_sym_encrypt","return_type":"bytea","arguments":"text, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_encrypt_bytea","return_type":"bytea","arguments":"bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_encrypt","return_type":"bytea","arguments":"text, text, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_encrypt_bytea","return_type":"bytea","arguments":"bytea, text, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_decrypt","return_type":"text","arguments":"bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_decrypt_bytea","return_type":"bytea","arguments":"bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_decrypt","return_type":"text","arguments":"bytea, text, text","type":"FUNCTION"},{"name":"extensions.algorithm_sign","return_type":"text","arguments":"signables text, secret text, algorithm text","type":"FUNCTION"},{"name":"extensions.verify","return_type":"record","arguments":"token text, secret text, algorithm text DEFAULT 'HS256'::text","type":"FUNCTION"},{"name":"extensions.grant_pg_cron_access","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"extensions.grant_pg_net_access","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"extensions.pg_stat_statements_reset","return_type":"void","arguments":"userid oid DEFAULT 0, dbid oid DEFAULT 0, queryid bigint DEFAULT 0","type":"FUNCTION"},{"name":"extensions.pg_stat_statements_info","return_type":"record","arguments":"OUT dealloc bigint, OUT stats_reset timestamp with time zone","type":"FUNCTION"},{"name":"extensions.pg_stat_statements","return_type":"record","arguments":"showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT blk_read_time double precision, OUT blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision","type":"FUNCTION"},{"name":"extensions.set_graphql_placeholder","return_type":"event_trigger","arguments":"","type":"FUNCTION"}],"driver":{"name":"postgres","database_version":"PostgreSQL 15.1 (Ubuntu 15.1-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 64-bit","meta":{"current_schema":"public","search_paths":["\"\\$user\"","public","extensions"],"dict":{"Functions":"Stored procedures and functions"}}}} +{"name":"postgres","desc":"","tables":[{"name":"auth.users","type":"BASE TABLE","comment":"Auth: Stores user login data within a secure schema.","columns":[{"name":"instance_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"aud","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"role","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"email","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"encrypted_password","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"confirmed_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"invited_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"confirmation_token","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"confirmation_sent_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"recovery_token","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"recovery_sent_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"email_change_token","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"email_change","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"email_change_sent_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"last_sign_in_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"raw_app_meta_data","type":"jsonb","nullable":true,"default":null,"comment":""},{"name":"raw_user_meta_data","type":"jsonb","nullable":true,"default":null,"comment":""},{"name":"is_super_admin","type":"boolean","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"users_pkey","def":"CREATE UNIQUE INDEX users_pkey ON auth.users USING btree (id)","table":"auth.users","columns":["id"],"comment":""},{"name":"users_email_key","def":"CREATE UNIQUE INDEX users_email_key ON auth.users USING btree (email)","table":"auth.users","columns":["email"],"comment":""},{"name":"users_instance_id_email_idx","def":"CREATE INDEX users_instance_id_email_idx ON auth.users USING btree (instance_id, email)","table":"auth.users","columns":["email","instance_id"],"comment":""},{"name":"users_instance_id_idx","def":"CREATE INDEX users_instance_id_idx ON auth.users USING btree (instance_id)","table":"auth.users","columns":["instance_id"],"comment":""}],"constraints":[{"name":"users_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"auth.users","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"users_email_key","type":"UNIQUE","def":"UNIQUE (email)","table":"auth.users","referenced_table":"","columns":["email"],"referenced_columns":[],"comment":""}],"triggers":[{"name":"on_auth_user_created","def":"CREATE TRIGGER on_auth_user_created AFTER INSERT ON auth.users FOR EACH ROW EXECUTE FUNCTION handle_new_user()","comment":""}],"def":""},{"name":"auth.refresh_tokens","type":"BASE TABLE","comment":"Auth: Store of tokens used to refresh JWT tokens once they expire.","columns":[{"name":"instance_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"id","type":"bigint","nullable":false,"default":"nextval('auth.refresh_tokens_id_seq'::regclass)","comment":""},{"name":"token","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"user_id","type":"varchar(255)","nullable":true,"default":null,"comment":""},{"name":"revoked","type":"boolean","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"refresh_tokens_pkey","def":"CREATE UNIQUE INDEX refresh_tokens_pkey ON auth.refresh_tokens USING btree (id)","table":"auth.refresh_tokens","columns":["id"],"comment":""},{"name":"refresh_tokens_instance_id_idx","def":"CREATE INDEX refresh_tokens_instance_id_idx ON auth.refresh_tokens USING btree (instance_id)","table":"auth.refresh_tokens","columns":["instance_id"],"comment":""},{"name":"refresh_tokens_instance_id_user_id_idx","def":"CREATE INDEX refresh_tokens_instance_id_user_id_idx ON auth.refresh_tokens USING btree (instance_id, user_id)","table":"auth.refresh_tokens","columns":["instance_id","user_id"],"comment":""},{"name":"refresh_tokens_token_idx","def":"CREATE INDEX refresh_tokens_token_idx ON auth.refresh_tokens USING btree (token)","table":"auth.refresh_tokens","columns":["token"],"comment":""}],"constraints":[{"name":"refresh_tokens_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"auth.refresh_tokens","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"auth.instances","type":"BASE TABLE","comment":"Auth: Manages users across multiple sites.","columns":[{"name":"id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"uuid","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"raw_base_config","type":"text","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"instances_pkey","def":"CREATE UNIQUE INDEX instances_pkey ON auth.instances USING btree (id)","table":"auth.instances","columns":["id"],"comment":""}],"constraints":[{"name":"instances_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"auth.instances","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"auth.audit_log_entries","type":"BASE TABLE","comment":"Auth: Audit trail for user actions.","columns":[{"name":"instance_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"payload","type":"json","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"audit_log_entries_pkey","def":"CREATE UNIQUE INDEX audit_log_entries_pkey ON auth.audit_log_entries USING btree (id)","table":"auth.audit_log_entries","columns":["id"],"comment":""},{"name":"audit_logs_instance_id_idx","def":"CREATE INDEX audit_logs_instance_id_idx ON auth.audit_log_entries USING btree (instance_id)","table":"auth.audit_log_entries","columns":["instance_id"],"comment":""}],"constraints":[{"name":"audit_log_entries_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"auth.audit_log_entries","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"auth.schema_migrations","type":"BASE TABLE","comment":"Auth: Manages updates to the auth system.","columns":[{"name":"version","type":"varchar(255)","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"schema_migrations_pkey","def":"CREATE UNIQUE INDEX schema_migrations_pkey ON auth.schema_migrations USING btree (version)","table":"auth.schema_migrations","columns":["version"],"comment":""}],"constraints":[{"name":"schema_migrations_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (version)","table":"auth.schema_migrations","referenced_table":"","columns":["version"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"storage.buckets","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"text","nullable":false,"default":null,"comment":""},{"name":"name","type":"text","nullable":false,"default":null,"comment":""},{"name":"owner","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""}],"indexes":[{"name":"buckets_pkey","def":"CREATE UNIQUE INDEX buckets_pkey ON storage.buckets USING btree (id)","table":"storage.buckets","columns":["id"],"comment":""},{"name":"bname","def":"CREATE UNIQUE INDEX bname ON storage.buckets USING btree (name)","table":"storage.buckets","columns":["name"],"comment":""}],"constraints":[{"name":"buckets_owner_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (owner) REFERENCES auth.users(id)","table":"storage.buckets","referenced_table":"users","columns":["owner"],"referenced_columns":["id"],"comment":""},{"name":"buckets_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"storage.buckets","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"storage.objects","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"uuid","nullable":false,"default":"uuid_generate_v4()","comment":""},{"name":"bucket_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"owner","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"last_accessed_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"metadata","type":"jsonb","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"objects_pkey","def":"CREATE UNIQUE INDEX objects_pkey ON storage.objects USING btree (id)","table":"storage.objects","columns":["id"],"comment":""},{"name":"bucketid_objname","def":"CREATE UNIQUE INDEX bucketid_objname ON storage.objects USING btree (bucket_id, name)","table":"storage.objects","columns":["bucket_id","name"],"comment":""},{"name":"name_prefix_search","def":"CREATE INDEX name_prefix_search ON storage.objects USING btree (name text_pattern_ops)","table":"storage.objects","columns":["name"],"comment":""}],"constraints":[{"name":"objects_owner_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (owner) REFERENCES auth.users(id)","table":"storage.objects","referenced_table":"users","columns":["owner"],"referenced_columns":["id"],"comment":""},{"name":"objects_bucketId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id)","table":"storage.objects","referenced_table":"buckets","columns":["bucket_id"],"referenced_columns":["id"],"comment":""},{"name":"objects_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"storage.objects","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"storage.migrations","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"integer","nullable":false,"default":null,"comment":""},{"name":"name","type":"varchar(100)","nullable":false,"default":null,"comment":""},{"name":"hash","type":"varchar(40)","nullable":false,"default":null,"comment":""},{"name":"executed_at","type":"timestamp without time zone","nullable":true,"default":"CURRENT_TIMESTAMP","comment":""}],"indexes":[{"name":"migrations_pkey","def":"CREATE UNIQUE INDEX migrations_pkey ON storage.migrations USING btree (id)","table":"storage.migrations","columns":["id"],"comment":""},{"name":"migrations_name_key","def":"CREATE UNIQUE INDEX migrations_name_key ON storage.migrations USING btree (name)","table":"storage.migrations","columns":["name"],"comment":""}],"constraints":[{"name":"migrations_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"storage.migrations","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"migrations_name_key","type":"UNIQUE","def":"UNIQUE (name)","table":"storage.migrations","referenced_table":"","columns":["name"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"net.http_request_queue","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"bigint","nullable":false,"default":"nextval('net.http_request_queue_id_seq'::regclass)","comment":""},{"name":"method","type":"net.http_method","nullable":false,"default":null,"comment":""},{"name":"url","type":"text","nullable":false,"default":null,"comment":""},{"name":"headers","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"body","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"timeout_milliseconds","type":"integer","nullable":false,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":""},{"name":"net._http_response","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"status_code","type":"integer","nullable":true,"default":null,"comment":""},{"name":"content_type","type":"text","nullable":true,"default":null,"comment":""},{"name":"headers","type":"jsonb","nullable":true,"default":null,"comment":""},{"name":"content","type":"text","nullable":true,"default":null,"comment":""},{"name":"timed_out","type":"boolean","nullable":true,"default":null,"comment":""},{"name":"error_msg","type":"text","nullable":true,"default":null,"comment":""},{"name":"created","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""}],"indexes":[{"name":"_http_response_created_idx","def":"CREATE INDEX _http_response_created_idx ON net._http_response USING btree (created)","table":"net._http_response","columns":["created"],"comment":""}],"constraints":[],"triggers":[],"def":""},{"name":"supabase_functions.migrations","type":"BASE TABLE","comment":"","columns":[{"name":"version","type":"text","nullable":false,"default":null,"comment":""},{"name":"inserted_at","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""}],"indexes":[{"name":"migrations_pkey","def":"CREATE UNIQUE INDEX migrations_pkey ON supabase_functions.migrations USING btree (version)","table":"supabase_functions.migrations","columns":["version"],"comment":""}],"constraints":[{"name":"migrations_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (version)","table":"supabase_functions.migrations","referenced_table":"","columns":["version"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"supabase_functions.hooks","type":"BASE TABLE","comment":"Supabase Functions Hooks: Audit trail for triggered hooks.","columns":[{"name":"id","type":"bigint","nullable":false,"default":"nextval('supabase_functions.hooks_id_seq'::regclass)","comment":""},{"name":"hook_table_id","type":"integer","nullable":false,"default":null,"comment":""},{"name":"hook_name","type":"text","nullable":false,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""},{"name":"request_id","type":"bigint","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"hooks_pkey","def":"CREATE UNIQUE INDEX hooks_pkey ON supabase_functions.hooks USING btree (id)","table":"supabase_functions.hooks","columns":["id"],"comment":""},{"name":"supabase_functions_hooks_request_id_idx","def":"CREATE INDEX supabase_functions_hooks_request_id_idx ON supabase_functions.hooks USING btree (request_id)","table":"supabase_functions.hooks","columns":["request_id"],"comment":""},{"name":"supabase_functions_hooks_h_table_id_h_name_idx","def":"CREATE INDEX supabase_functions_hooks_h_table_id_h_name_idx ON supabase_functions.hooks USING btree (hook_table_id, hook_name)","table":"supabase_functions.hooks","columns":["hook_name","hook_table_id"],"comment":""}],"constraints":[{"name":"hooks_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"supabase_functions.hooks","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"public.study","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"uuid","nullable":false,"default":"gen_random_uuid()","comment":""},{"name":"contact","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"title","type":"text","nullable":false,"default":null,"comment":""},{"name":"description","type":"text","nullable":false,"default":null,"comment":""},{"name":"icon_name","type":"text","nullable":false,"default":null,"comment":""},{"name":"published","type":"boolean","nullable":false,"default":"false","comment":""},{"name":"registry_published","type":"boolean","nullable":false,"default":"false","comment":""},{"name":"questionnaire","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"eligibility_criteria","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"observations","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"interventions","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"consent","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"schedule","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"report_specification","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"results","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":false,"default":"now()","comment":""},{"name":"user_id","type":"uuid","nullable":false,"default":null,"comment":"UserId of study creator"},{"name":"participation","type":"participation","nullable":false,"default":"'invite'::participation","comment":""},{"name":"result_sharing","type":"result_sharing","nullable":false,"default":"'private'::result_sharing","comment":""},{"name":"collaborator_emails","type":"text[]","nullable":false,"default":"'{}'::text[]","comment":""}],"indexes":[{"name":"study_id_key","def":"CREATE UNIQUE INDEX study_id_key ON public.study USING btree (id)","table":"public.study","columns":["id"],"comment":""},{"name":"study_pkey","def":"CREATE UNIQUE INDEX study_pkey ON public.study USING btree (id)","table":"public.study","columns":["id"],"comment":""}],"constraints":[{"name":"study_id_key","type":"UNIQUE","def":"UNIQUE (id)","table":"public.study","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"study_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"public.study","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"study_userId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id)","table":"public.study","referenced_table":"user","columns":["user_id"],"referenced_columns":["id"],"comment":""}],"triggers":[{"name":"handle_updated_at","def":"CREATE TRIGGER handle_updated_at BEFORE UPDATE ON public.study FOR EACH ROW EXECUTE FUNCTION moddatetime('updated_at')","comment":""}],"def":""},{"name":"public.study_subject","type":"BASE TABLE","comment":"","columns":[{"name":"id","type":"uuid","nullable":false,"default":"gen_random_uuid()","comment":""},{"name":"study_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"user_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"started_at","type":"timestamp with time zone","nullable":true,"default":"now()","comment":""},{"name":"selected_intervention_ids","type":"text[]","nullable":false,"default":null,"comment":""},{"name":"invite_code","type":"text","nullable":true,"default":null,"comment":""},{"name":"is_deleted","type":"boolean","nullable":false,"default":"false","comment":""}],"indexes":[{"name":"study_subject_pkey","def":"CREATE UNIQUE INDEX study_subject_pkey ON public.study_subject USING btree (id)","table":"public.study_subject","columns":["id"],"comment":""}],"constraints":[{"name":"study_subject_studyId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (study_id) REFERENCES study(id) ON DELETE CASCADE","table":"public.study_subject","referenced_table":"study","columns":["study_id"],"referenced_columns":["id"],"comment":""},{"name":"study_subject_loginCode_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (invite_code) REFERENCES study_invite(code) ON DELETE CASCADE","table":"public.study_subject","referenced_table":"study_invite","columns":["invite_code"],"referenced_columns":["code"],"comment":""},{"name":"study_subject_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"public.study_subject","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"study_subject_userId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id)","table":"public.study_subject","referenced_table":"user","columns":["user_id"],"referenced_columns":["id"],"comment":""}],"triggers":[],"def":""},{"name":"public.app_config","type":"BASE TABLE","comment":"Stores app config for different envs","columns":[{"name":"id","type":"text","nullable":false,"default":null,"comment":""},{"name":"app_min_version","type":"text","nullable":false,"default":null,"comment":""},{"name":"app_privacy","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"app_terms","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"designer_privacy","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"designer_terms","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"imprint","type":"jsonb","nullable":false,"default":null,"comment":""},{"name":"contact","type":"jsonb","nullable":false,"default":"'{\"email\": \"hpi-info@hpi.de\", \"phone\": \"+49-(0)331 5509-0\", \"website\": \"https://hpi.de/\", \"organization\": \"Hasso Plattner Institute\"}'::jsonb","comment":""},{"name":"analytics","type":"jsonb","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"AppConfig_pkey","def":"CREATE UNIQUE INDEX \"AppConfig_pkey\" ON public.app_config USING btree (id)","table":"public.app_config","columns":["id"],"comment":""}],"constraints":[{"name":"AppConfig_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"public.app_config","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"public.repo","type":"BASE TABLE","comment":"Git repo where the generated project is stored","columns":[{"name":"project_id","type":"text","nullable":false,"default":null,"comment":""},{"name":"user_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"study_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"provider","type":"git_provider","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"repo_pkey","def":"CREATE UNIQUE INDEX repo_pkey ON public.repo USING btree (project_id)","table":"public.repo","columns":["project_id"],"comment":""}],"constraints":[{"name":"repo_studyId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (study_id) REFERENCES study(id)","table":"public.repo","referenced_table":"study","columns":["study_id"],"referenced_columns":["id"],"comment":""},{"name":"repo_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (project_id)","table":"public.repo","referenced_table":"","columns":["project_id"],"referenced_columns":[],"comment":""},{"name":"repo_userId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id) ON DELETE CASCADE","table":"public.repo","referenced_table":"user","columns":["user_id"],"referenced_columns":["id"],"comment":""}],"triggers":[],"def":""},{"name":"public.study_invite","type":"BASE TABLE","comment":"Study invite codes","columns":[{"name":"code","type":"text","nullable":false,"default":null,"comment":""},{"name":"study_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"preselected_intervention_ids","type":"text[]","nullable":true,"default":null,"comment":"Intervention Ids (and order) preselected by study creator"}],"indexes":[{"name":"study_invite_pkey","def":"CREATE UNIQUE INDEX study_invite_pkey ON public.study_invite USING btree (code)","table":"public.study_invite","columns":["code"],"comment":""}],"constraints":[{"name":"study_invite_studyId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (study_id) REFERENCES study(id) ON DELETE CASCADE","table":"public.study_invite","referenced_table":"study","columns":["study_id"],"referenced_columns":["id"],"comment":""},{"name":"study_invite_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (code)","table":"public.study_invite","referenced_table":"","columns":["code"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"public.subject_progress","type":"BASE TABLE","comment":"","columns":[{"name":"completed_at","type":"timestamp with time zone","nullable":false,"default":"timezone('utc'::text, now())","comment":""},{"name":"subject_id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"intervention_id","type":"text","nullable":false,"default":null,"comment":""},{"name":"task_id","type":"text","nullable":false,"default":null,"comment":""},{"name":"result_type","type":"text","nullable":false,"default":null,"comment":""},{"name":"result","type":"jsonb","nullable":false,"default":null,"comment":""}],"indexes":[{"name":"participant_progress_pkey","def":"CREATE UNIQUE INDEX participant_progress_pkey ON public.subject_progress USING btree (completed_at, subject_id)","table":"public.subject_progress","columns":["completed_at","subject_id"],"comment":""}],"constraints":[{"name":"participant_progress_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (completed_at, subject_id)","table":"public.subject_progress","referenced_table":"","columns":["completed_at","subject_id"],"referenced_columns":[],"comment":""},{"name":"participant_progress_subjectId_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (subject_id) REFERENCES study_subject(id) ON DELETE CASCADE","table":"public.subject_progress","referenced_table":"study_subject","columns":["subject_id"],"referenced_columns":["id"],"comment":""}],"triggers":[],"def":""},{"name":"public.study_progress_export","type":"VIEW","comment":"","columns":[{"name":"completed_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"intervention_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"task_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"result_type","type":"text","nullable":true,"default":null,"comment":""},{"name":"result","type":"jsonb","nullable":true,"default":null,"comment":""},{"name":"subject_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"user_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"study_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"started_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"selected_intervention_ids","type":"text[]","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW study_progress_export AS (\n SELECT subject_progress.completed_at,\n subject_progress.intervention_id,\n subject_progress.task_id,\n subject_progress.result_type,\n subject_progress.result,\n subject_progress.subject_id,\n study_subject.user_id,\n study_subject.study_id,\n study_subject.started_at,\n study_subject.selected_intervention_ids\n FROM study_subject,\n subject_progress\n WHERE (study_subject.id = subject_progress.subject_id)\n)","referenced_tables":["public.study_subject"]},{"name":"public.user","type":"BASE TABLE","comment":"Users get automatically added, when a new user is created in auth.users","columns":[{"name":"id","type":"uuid","nullable":false,"default":null,"comment":""},{"name":"email","type":"text","nullable":true,"default":null,"comment":""},{"name":"preferences","type":"jsonb","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"user_pkey","def":"CREATE UNIQUE INDEX user_pkey ON public.\"user\" USING btree (id)","table":"public.user","columns":["id"],"comment":""}],"constraints":[{"name":"user_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"public.user","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[],"def":""},{"name":"extensions.pg_stat_statements_info","type":"VIEW","comment":"","columns":[{"name":"dealloc","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"stats_reset","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW pg_stat_statements_info AS (\n SELECT pg_stat_statements_info.dealloc,\n pg_stat_statements_info.stats_reset\n FROM pg_stat_statements_info() pg_stat_statements_info(dealloc, stats_reset)\n)","referenced_tables":["pg_stat_statements_info"]},{"name":"extensions.pg_stat_statements","type":"VIEW","comment":"","columns":[{"name":"userid","type":"oid","nullable":true,"default":null,"comment":""},{"name":"dbid","type":"oid","nullable":true,"default":null,"comment":""},{"name":"toplevel","type":"boolean","nullable":true,"default":null,"comment":""},{"name":"queryid","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"query","type":"text","nullable":true,"default":null,"comment":""},{"name":"plans","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"total_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"min_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"max_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"mean_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"stddev_plan_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"calls","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"total_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"min_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"max_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"mean_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"stddev_exec_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"rows","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"shared_blks_hit","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"shared_blks_read","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"shared_blks_dirtied","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"shared_blks_written","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"local_blks_hit","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"local_blks_read","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"local_blks_dirtied","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"local_blks_written","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"temp_blks_read","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"temp_blks_written","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"blk_read_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"blk_write_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"temp_blk_read_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"temp_blk_write_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"wal_records","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"wal_fpi","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"wal_bytes","type":"numeric","nullable":true,"default":null,"comment":""},{"name":"jit_functions","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"jit_generation_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"jit_inlining_count","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"jit_inlining_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"jit_optimization_count","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"jit_optimization_time","type":"double precision","nullable":true,"default":null,"comment":""},{"name":"jit_emission_count","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"jit_emission_time","type":"double precision","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW pg_stat_statements AS (\n SELECT pg_stat_statements.userid,\n pg_stat_statements.dbid,\n pg_stat_statements.toplevel,\n pg_stat_statements.queryid,\n pg_stat_statements.query,\n pg_stat_statements.plans,\n pg_stat_statements.total_plan_time,\n pg_stat_statements.min_plan_time,\n pg_stat_statements.max_plan_time,\n pg_stat_statements.mean_plan_time,\n pg_stat_statements.stddev_plan_time,\n pg_stat_statements.calls,\n pg_stat_statements.total_exec_time,\n pg_stat_statements.min_exec_time,\n pg_stat_statements.max_exec_time,\n pg_stat_statements.mean_exec_time,\n pg_stat_statements.stddev_exec_time,\n pg_stat_statements.rows,\n pg_stat_statements.shared_blks_hit,\n pg_stat_statements.shared_blks_read,\n pg_stat_statements.shared_blks_dirtied,\n pg_stat_statements.shared_blks_written,\n pg_stat_statements.local_blks_hit,\n pg_stat_statements.local_blks_read,\n pg_stat_statements.local_blks_dirtied,\n pg_stat_statements.local_blks_written,\n pg_stat_statements.temp_blks_read,\n pg_stat_statements.temp_blks_written,\n pg_stat_statements.blk_read_time,\n pg_stat_statements.blk_write_time,\n pg_stat_statements.temp_blk_read_time,\n pg_stat_statements.temp_blk_write_time,\n pg_stat_statements.wal_records,\n pg_stat_statements.wal_fpi,\n pg_stat_statements.wal_bytes,\n pg_stat_statements.jit_functions,\n pg_stat_statements.jit_generation_time,\n pg_stat_statements.jit_inlining_count,\n pg_stat_statements.jit_inlining_time,\n pg_stat_statements.jit_optimization_count,\n pg_stat_statements.jit_optimization_time,\n pg_stat_statements.jit_emission_count,\n pg_stat_statements.jit_emission_time\n FROM pg_stat_statements(true) pg_stat_statements(userid, dbid, toplevel, queryid, query, plans, total_plan_time, min_plan_time, max_plan_time, mean_plan_time, stddev_plan_time, calls, total_exec_time, min_exec_time, max_exec_time, mean_exec_time, stddev_exec_time, rows, shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written, local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written, temp_blks_read, temp_blks_written, blk_read_time, blk_write_time, temp_blk_read_time, temp_blk_write_time, wal_records, wal_fpi, wal_bytes, jit_functions, jit_generation_time, jit_inlining_count, jit_inlining_time, jit_optimization_count, jit_optimization_time, jit_emission_count, jit_emission_time)\n)","referenced_tables":["pg_stat_statements"]},{"name":"pgsodium.key","type":"BASE TABLE","comment":"This table holds metadata for derived keys given a key_id and key_context. The raw key is never stored.","columns":[{"name":"id","type":"uuid","nullable":false,"default":"gen_random_uuid()","comment":""},{"name":"status","type":"pgsodium.key_status","nullable":true,"default":"'valid'::pgsodium.key_status","comment":""},{"name":"created","type":"timestamp with time zone","nullable":false,"default":"CURRENT_TIMESTAMP","comment":""},{"name":"expires","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"key_type","type":"pgsodium.key_type","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"bigint","nullable":true,"default":"nextval('pgsodium.key_key_id_seq'::regclass)","comment":""},{"name":"key_context","type":"bytea","nullable":true,"default":"'\\x7067736f6469756d'::bytea","comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"associated_data","type":"text","nullable":true,"default":"'associated'::text","comment":""},{"name":"raw_key","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"raw_key_nonce","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"parent_key","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"comment","type":"text","nullable":true,"default":null,"comment":""},{"name":"user_data","type":"text","nullable":true,"default":null,"comment":""}],"indexes":[{"name":"key_pkey","def":"CREATE UNIQUE INDEX key_pkey ON pgsodium.key USING btree (id)","table":"pgsodium.key","columns":["id"],"comment":""},{"name":"key_status_idx","def":"CREATE INDEX key_status_idx ON pgsodium.key USING btree (status) WHERE (status = ANY (ARRAY['valid'::pgsodium.key_status, 'default'::pgsodium.key_status]))","table":"pgsodium.key","columns":["status"],"comment":""},{"name":"key_status_idx1","def":"CREATE UNIQUE INDEX key_status_idx1 ON pgsodium.key USING btree (status) WHERE (status = 'default'::pgsodium.key_status)","table":"pgsodium.key","columns":["status"],"comment":""},{"name":"key_key_id_key_context_key_type_idx","def":"CREATE UNIQUE INDEX key_key_id_key_context_key_type_idx ON pgsodium.key USING btree (key_id, key_context, key_type)","table":"pgsodium.key","columns":["key_context","key_id","key_type"],"comment":""},{"name":"pgsodium_key_unique_name","def":"CREATE UNIQUE INDEX pgsodium_key_unique_name ON pgsodium.key USING btree (name)","table":"pgsodium.key","columns":["name"],"comment":""}],"constraints":[{"name":"key_key_context_check","type":"CHECK","def":"CHECK ((length(key_context) = 8))","table":"pgsodium.key","referenced_table":"","columns":["key_context"],"referenced_columns":[],"comment":""},{"name":"pgsodium_raw","type":"CHECK","def":"CHECK (\nCASE\n WHEN (raw_key IS NOT NULL) THEN ((key_id IS NULL) AND (key_context IS NULL) AND (parent_key IS NOT NULL))\n ELSE ((key_id IS NOT NULL) AND (key_context IS NOT NULL) AND (parent_key IS NULL))\nEND)","table":"pgsodium.key","referenced_table":"","columns":["key_id","key_context","raw_key","parent_key"],"referenced_columns":[],"comment":""},{"name":"key_parent_key_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (parent_key) REFERENCES pgsodium.key(id)","table":"pgsodium.key","referenced_table":"key","columns":["parent_key"],"referenced_columns":["id"],"comment":""},{"name":"key_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"pgsodium.key","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""},{"name":"pgsodium_key_unique_name","type":"UNIQUE","def":"UNIQUE (name)","table":"pgsodium.key","referenced_table":"","columns":["name"],"referenced_columns":[],"comment":""}],"triggers":[{"name":"key_encrypt_secret_trigger_raw_key","def":"CREATE TRIGGER key_encrypt_secret_trigger_raw_key BEFORE INSERT OR UPDATE OF raw_key ON pgsodium.key FOR EACH ROW EXECUTE FUNCTION pgsodium.key_encrypt_secret_raw_key()","comment":""}],"def":""},{"name":"pgsodium.valid_key","type":"VIEW","comment":"","columns":[{"name":"id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"status","type":"pgsodium.key_status","nullable":true,"default":null,"comment":""},{"name":"key_type","type":"pgsodium.key_type","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"key_context","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"created","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"expires","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"associated_data","type":"text","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW valid_key AS (\n SELECT key.id,\n key.name,\n key.status,\n key.key_type,\n key.key_id,\n key.key_context,\n key.created,\n key.expires,\n key.associated_data\n FROM pgsodium.key\n WHERE ((key.status = ANY (ARRAY['valid'::pgsodium.key_status, 'default'::pgsodium.key_status])) AND\n CASE\n WHEN (key.expires IS NULL) THEN true\n ELSE (key.expires \u003e now())\n END)\n)","referenced_tables":["pgsodium.key"]},{"name":"pgsodium.masking_rule","type":"VIEW","comment":"","columns":[{"name":"attrelid","type":"oid","nullable":true,"default":null,"comment":""},{"name":"attnum","type":"integer","nullable":true,"default":null,"comment":""},{"name":"relnamespace","type":"regnamespace","nullable":true,"default":null,"comment":""},{"name":"relname","type":"name","nullable":true,"default":null,"comment":""},{"name":"attname","type":"name","nullable":true,"default":null,"comment":""},{"name":"format_type","type":"text","nullable":true,"default":null,"comment":""},{"name":"col_description","type":"text","nullable":true,"default":null,"comment":""},{"name":"key_id_column","type":"text","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"associated_columns","type":"text","nullable":true,"default":null,"comment":""},{"name":"nonce_column","type":"text","nullable":true,"default":null,"comment":""},{"name":"view_name","type":"text","nullable":true,"default":null,"comment":""},{"name":"priority","type":"integer","nullable":true,"default":null,"comment":""},{"name":"security_invoker","type":"boolean","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW masking_rule AS (\n WITH const AS (\n SELECT 'encrypt +with +key +id +([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'::text AS pattern_key_id,\n 'encrypt +with +key +column +([\\w\\\"\\-$]+)'::text AS pattern_key_id_column,\n '(?\u003c=associated) +\\(([\\w\\\"\\-$, ]+)\\)'::text AS pattern_associated_columns,\n '(?\u003c=nonce) +([\\w\\\"\\-$]+)'::text AS pattern_nonce_column,\n '(?\u003c=decrypt with view) +([\\w\\\"\\-$]+\\.[\\w\\\"\\-$]+)'::text AS pattern_view_name,\n '(?\u003c=security invoker)'::text AS pattern_security_invoker\n ), rules_from_seclabels AS (\n SELECT sl.objoid AS attrelid,\n sl.objsubid AS attnum,\n (c.relnamespace)::regnamespace AS relnamespace,\n c.relname,\n a.attname,\n format_type(a.atttypid, a.atttypmod) AS format_type,\n sl.label AS col_description,\n (regexp_match(sl.label, k.pattern_key_id_column, 'i'::text))[1] AS key_id_column,\n (regexp_match(sl.label, k.pattern_key_id, 'i'::text))[1] AS key_id,\n (regexp_match(sl.label, k.pattern_associated_columns, 'i'::text))[1] AS associated_columns,\n (regexp_match(sl.label, k.pattern_nonce_column, 'i'::text))[1] AS nonce_column,\n COALESCE((regexp_match(sl2.label, k.pattern_view_name, 'i'::text))[1], (((c.relnamespace)::regnamespace || '.'::text) || quote_ident(('decrypted_'::text || (c.relname)::text)))) AS view_name,\n 100 AS priority,\n ((regexp_match(sl.label, k.pattern_security_invoker, 'i'::text))[1] IS NOT NULL) AS security_invoker\n FROM const k,\n (((pg_seclabel sl\n JOIN pg_class c ON (((sl.classoid = c.tableoid) AND (sl.objoid = c.oid))))\n JOIN pg_attribute a ON (((a.attrelid = c.oid) AND (sl.objsubid = a.attnum))))\n LEFT JOIN pg_seclabel sl2 ON (((sl2.objoid = c.oid) AND (sl2.objsubid = 0))))\n WHERE ((a.attnum \u003e 0) AND (((c.relnamespace)::regnamespace)::oid \u003c\u003e ('pg_catalog'::regnamespace)::oid) AND (NOT a.attisdropped) AND (sl.label ~~* 'ENCRYPT%'::text) AND (sl.provider = 'pgsodium'::text))\n )\n SELECT DISTINCT ON (rules_from_seclabels.attrelid, rules_from_seclabels.attnum) rules_from_seclabels.attrelid,\n rules_from_seclabels.attnum,\n rules_from_seclabels.relnamespace,\n rules_from_seclabels.relname,\n rules_from_seclabels.attname,\n rules_from_seclabels.format_type,\n rules_from_seclabels.col_description,\n rules_from_seclabels.key_id_column,\n rules_from_seclabels.key_id,\n rules_from_seclabels.associated_columns,\n rules_from_seclabels.nonce_column,\n rules_from_seclabels.view_name,\n rules_from_seclabels.priority,\n rules_from_seclabels.security_invoker\n FROM rules_from_seclabels\n ORDER BY rules_from_seclabels.attrelid, rules_from_seclabels.attnum, rules_from_seclabels.priority DESC\n)"},{"name":"pgsodium.mask_columns","type":"VIEW","comment":"","columns":[{"name":"attname","type":"name","nullable":true,"default":null,"comment":""},{"name":"attrelid","type":"oid","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"text","nullable":true,"default":null,"comment":""},{"name":"key_id_column","type":"text","nullable":true,"default":null,"comment":""},{"name":"associated_columns","type":"text","nullable":true,"default":null,"comment":""},{"name":"nonce_column","type":"text","nullable":true,"default":null,"comment":""},{"name":"format_type","type":"text","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW mask_columns AS (\n SELECT a.attname,\n a.attrelid,\n m.key_id,\n m.key_id_column,\n m.associated_columns,\n m.nonce_column,\n m.format_type\n FROM (pg_attribute a\n LEFT JOIN pgsodium.masking_rule m ON (((m.attrelid = a.attrelid) AND (m.attname = a.attname))))\n WHERE ((a.attnum \u003e 0) AND (NOT a.attisdropped))\n ORDER BY a.attnum\n)","referenced_tables":["pg_attribute","pgsodium.masking_rule"]},{"name":"pgsodium.decrypted_key","type":"VIEW","comment":"","columns":[{"name":"id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"status","type":"pgsodium.key_status","nullable":true,"default":null,"comment":""},{"name":"created","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"expires","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"key_type","type":"pgsodium.key_type","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"bigint","nullable":true,"default":null,"comment":""},{"name":"key_context","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"associated_data","type":"text","nullable":true,"default":null,"comment":""},{"name":"raw_key","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"decrypted_raw_key","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"raw_key_nonce","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"parent_key","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"comment","type":"text","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW decrypted_key AS (\n SELECT key.id,\n key.status,\n key.created,\n key.expires,\n key.key_type,\n key.key_id,\n key.key_context,\n key.name,\n key.associated_data,\n key.raw_key,\n CASE\n WHEN (key.raw_key IS NULL) THEN NULL::bytea\n ELSE\n CASE\n WHEN (key.parent_key IS NULL) THEN NULL::bytea\n ELSE pgsodium.crypto_aead_det_decrypt(key.raw_key, convert_to(((key.id)::text || key.associated_data), 'utf8'::name), key.parent_key, key.raw_key_nonce)\n END\n END AS decrypted_raw_key,\n key.raw_key_nonce,\n key.parent_key,\n key.comment\n FROM pgsodium.key\n)","referenced_tables":["pgsodium.key"]},{"name":"vault.secrets","type":"BASE TABLE","comment":"Table with encrypted `secret` column for storing sensitive information on disk.","columns":[{"name":"id","type":"uuid","nullable":false,"default":"gen_random_uuid()","comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"description","type":"text","nullable":false,"default":"''::text","comment":""},{"name":"secret","type":"text","nullable":false,"default":null,"comment":""},{"name":"key_id","type":"uuid","nullable":true,"default":"(pgsodium.create_key()).id","comment":""},{"name":"nonce","type":"bytea","nullable":true,"default":"pgsodium.crypto_aead_det_noncegen()","comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":false,"default":"CURRENT_TIMESTAMP","comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":false,"default":"CURRENT_TIMESTAMP","comment":""}],"indexes":[{"name":"secrets_pkey","def":"CREATE UNIQUE INDEX secrets_pkey ON vault.secrets USING btree (id)","table":"vault.secrets","columns":["id"],"comment":""},{"name":"secrets_name_idx","def":"CREATE UNIQUE INDEX secrets_name_idx ON vault.secrets USING btree (name) WHERE (name IS NOT NULL)","table":"vault.secrets","columns":["name"],"comment":""}],"constraints":[{"name":"secrets_key_id_fkey","type":"FOREIGN KEY","def":"FOREIGN KEY (key_id) REFERENCES pgsodium.key(id)","table":"vault.secrets","referenced_table":"key","columns":["key_id"],"referenced_columns":["id"],"comment":""},{"name":"secrets_pkey","type":"PRIMARY KEY","def":"PRIMARY KEY (id)","table":"vault.secrets","referenced_table":"","columns":["id"],"referenced_columns":[],"comment":""}],"triggers":[{"name":"secrets_encrypt_secret_trigger_secret","def":"CREATE TRIGGER secrets_encrypt_secret_trigger_secret BEFORE INSERT OR UPDATE OF secret ON vault.secrets FOR EACH ROW EXECUTE FUNCTION vault.secrets_encrypt_secret_secret()","comment":""}],"def":""},{"name":"vault.decrypted_secrets","type":"VIEW","comment":"","columns":[{"name":"id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"name","type":"text","nullable":true,"default":null,"comment":""},{"name":"description","type":"text","nullable":true,"default":null,"comment":""},{"name":"secret","type":"text","nullable":true,"default":null,"comment":""},{"name":"decrypted_secret","type":"text","nullable":true,"default":null,"comment":""},{"name":"key_id","type":"uuid","nullable":true,"default":null,"comment":""},{"name":"nonce","type":"bytea","nullable":true,"default":null,"comment":""},{"name":"created_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""},{"name":"updated_at","type":"timestamp with time zone","nullable":true,"default":null,"comment":""}],"indexes":[],"constraints":[],"triggers":[],"def":"CREATE VIEW decrypted_secrets AS (\n SELECT secrets.id,\n secrets.name,\n secrets.description,\n secrets.secret,\n CASE\n WHEN (secrets.secret IS NULL) THEN NULL::text\n ELSE\n CASE\n WHEN (secrets.key_id IS NULL) THEN NULL::text\n 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)\n END\n END AS decrypted_secret,\n secrets.key_id,\n secrets.nonce,\n secrets.created_at,\n secrets.updated_at\n FROM vault.secrets\n)","referenced_tables":["vault.secrets"]}],"relations":[{"table":"storage.buckets","columns":["owner"],"cardinality":"Zero or more","parent_table":"auth.users","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (owner) REFERENCES auth.users(id)","virtual":false},{"table":"storage.objects","columns":["owner"],"cardinality":"Zero or more","parent_table":"auth.users","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (owner) REFERENCES auth.users(id)","virtual":false},{"table":"storage.objects","columns":["bucket_id"],"cardinality":"Zero or more","parent_table":"storage.buckets","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (bucket_id) REFERENCES storage.buckets(id)","virtual":false},{"table":"public.study","columns":["user_id"],"cardinality":"Zero or more","parent_table":"public.user","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id)","virtual":false},{"table":"public.study_subject","columns":["study_id"],"cardinality":"Zero or more","parent_table":"public.study","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (study_id) REFERENCES study(id) ON DELETE CASCADE","virtual":false},{"table":"public.study_subject","columns":["invite_code"],"cardinality":"Zero or more","parent_table":"public.study_invite","parent_columns":["code"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (invite_code) REFERENCES study_invite(code) ON DELETE CASCADE","virtual":false},{"table":"public.study_subject","columns":["user_id"],"cardinality":"Zero or more","parent_table":"public.user","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id)","virtual":false},{"table":"public.repo","columns":["study_id"],"cardinality":"Zero or more","parent_table":"public.study","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (study_id) REFERENCES study(id)","virtual":false},{"table":"public.repo","columns":["user_id"],"cardinality":"Zero or more","parent_table":"public.user","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (user_id) REFERENCES \"user\"(id) ON DELETE CASCADE","virtual":false},{"table":"public.study_invite","columns":["study_id"],"cardinality":"Zero or more","parent_table":"public.study","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (study_id) REFERENCES study(id) ON DELETE CASCADE","virtual":false},{"table":"public.subject_progress","columns":["subject_id"],"cardinality":"Zero or more","parent_table":"public.study_subject","parent_columns":["id"],"parent_cardinality":"Exactly one","def":"FOREIGN KEY (subject_id) REFERENCES study_subject(id) ON DELETE CASCADE","virtual":false},{"table":"pgsodium.key","columns":["parent_key"],"cardinality":"Zero or more","parent_table":"pgsodium.key","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (parent_key) REFERENCES pgsodium.key(id)","virtual":false},{"table":"vault.secrets","columns":["key_id"],"cardinality":"Zero or more","parent_table":"pgsodium.key","parent_columns":["id"],"parent_cardinality":"Zero or one","def":"FOREIGN KEY (key_id) REFERENCES pgsodium.key(id)","virtual":false}],"functions":[{"name":"extensions.uuid_generate_v4","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"pgbouncer.get_auth","return_type":"record","arguments":"p_usename text","type":"FUNCTION"},{"name":"storage.filename","return_type":"text","arguments":"name text","type":"FUNCTION"},{"name":"extensions.digest","return_type":"bytea","arguments":"text, text","type":"FUNCTION"},{"name":"storage.foldername","return_type":"_text","arguments":"name text","type":"FUNCTION"},{"name":"extensions.decrypt_iv","return_type":"bytea","arguments":"bytea, bytea, bytea, text","type":"FUNCTION"},{"name":"storage.extension","return_type":"text","arguments":"name text","type":"FUNCTION"},{"name":"extensions.gen_random_bytes","return_type":"bytea","arguments":"integer","type":"FUNCTION"},{"name":"extensions.encrypt","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.decrypt","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.encrypt_iv","return_type":"bytea","arguments":"bytea, bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.gen_random_uuid","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_nil","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_ns_dns","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"storage.search","return_type":"record","arguments":"prefix text, bucketname text, limits integer DEFAULT 100, levels integer DEFAULT 1, offsets integer DEFAULT 0","type":"FUNCTION"},{"name":"extensions.uuid_ns_url","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_ns_oid","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"auth.uid","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"auth.email","return_type":"text","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_generate_v3","return_type":"uuid","arguments":"namespace uuid, name text","type":"FUNCTION"},{"name":"extensions.uuid_ns_x500","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_generate_v1","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_generate_v1mc","return_type":"uuid","arguments":"","type":"FUNCTION"},{"name":"net.check_worker_is_up","return_type":"void","arguments":"","type":"FUNCTION"},{"name":"net._await_response","return_type":"bool","arguments":"request_id bigint","type":"FUNCTION"},{"name":"net._urlencode_string","return_type":"text","arguments":"string character varying","type":"FUNCTION"},{"name":"net._encode_url_with_params_array","return_type":"text","arguments":"url text, params_array text[]","type":"FUNCTION"},{"name":"graphql.increment_schema_version","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"graphql.get_schema_version","return_type":"int4","arguments":"","type":"FUNCTION"},{"name":"graphql.resolve","return_type":"jsonb","arguments":"query text, variables jsonb DEFAULT '{}'::jsonb, \"operationName\" text DEFAULT NULL::text, extensions jsonb DEFAULT NULL::jsonb","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt_bytea","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt","return_type":"text","arguments":"bytea, bytea, text, text","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt_bytea","return_type":"bytea","arguments":"bytea, bytea, text, text","type":"FUNCTION"},{"name":"net.http_delete","return_type":"int8","arguments":"url text, params jsonb DEFAULT '{}'::jsonb, headers jsonb DEFAULT '{}'::jsonb, timeout_milliseconds integer DEFAULT 2000","type":"FUNCTION"},{"name":"net._http_collect_response","return_type":"http_response_result","arguments":"request_id bigint, async boolean DEFAULT true","type":"FUNCTION"},{"name":"net.http_collect_response","return_type":"http_response_result","arguments":"request_id bigint, async boolean DEFAULT true","type":"FUNCTION"},{"name":"supabase_functions.http_request","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"public.active_subject_count","return_type":"int4","arguments":"study study","type":"FUNCTION"},{"name":"public.can_edit","return_type":"bool","arguments":"user_id uuid, study_param study","type":"FUNCTION"},{"name":"public.get_study_from_invite","return_type":"record","arguments":"invite_code text","type":"FUNCTION"},{"name":"public.get_study_record_from_invite","return_type":"study","arguments":"invite_code text","type":"FUNCTION"},{"name":"public.handle_new_user","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"public.has_study_ended","return_type":"bool","arguments":"psubject_id uuid","type":"FUNCTION"},{"name":"public.has_results_public","return_type":"bool","arguments":"psubject_id uuid","type":"FUNCTION"},{"name":"public.has_study_ended","return_type":"bool","arguments":"subject study_subject","type":"FUNCTION"},{"name":"public.is_active_subject","return_type":"bool","arguments":"psubject_id uuid, days_active integer","type":"FUNCTION"},{"name":"public.is_study_subject_of","return_type":"bool","arguments":"_user_id uuid, _study_id uuid","type":"FUNCTION"},{"name":"public.last_completed_task","return_type":"date","arguments":"psubject_id uuid","type":"FUNCTION"},{"name":"public.study_active_days","return_type":"_int4","arguments":"study_param study","type":"FUNCTION"},{"name":"public.study_ended_count","return_type":"int4","arguments":"study study","type":"FUNCTION"},{"name":"public.study_length","return_type":"int4","arguments":"study_param study","type":"FUNCTION"},{"name":"public.study_missed_days","return_type":"_int4","arguments":"study_param study","type":"FUNCTION"},{"name":"net.http_get","return_type":"int8","arguments":"url text, params jsonb DEFAULT '{}'::jsonb, headers jsonb DEFAULT '{}'::jsonb, timeout_milliseconds integer DEFAULT 2000","type":"FUNCTION"},{"name":"extensions.pgp_sym_decrypt_bytea","return_type":"bytea","arguments":"bytea, text, text","type":"FUNCTION"},{"name":"public.study_participant_count","return_type":"int4","arguments":"study study","type":"FUNCTION"},{"name":"public.study_total_tasks","return_type":"int4","arguments":"subject study_subject","type":"FUNCTION"},{"name":"public.subject_current_day","return_type":"int4","arguments":"subject study_subject","type":"FUNCTION"},{"name":"public.subject_total_active_days","return_type":"int4","arguments":"subject study_subject","type":"FUNCTION"},{"name":"public.user_email","return_type":"text","arguments":"user_id uuid","type":"FUNCTION"},{"name":"extensions.pgp_pub_encrypt","return_type":"bytea","arguments":"text, bytea","type":"FUNCTION"},{"name":"extensions.pgp_pub_encrypt_bytea","return_type":"bytea","arguments":"bytea, bytea","type":"FUNCTION"},{"name":"extensions.pgp_pub_encrypt","return_type":"bytea","arguments":"text, bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_pub_encrypt_bytea","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt","return_type":"text","arguments":"bytea, bytea","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt_bytea","return_type":"bytea","arguments":"bytea, bytea","type":"FUNCTION"},{"name":"extensions.pgp_pub_decrypt","return_type":"text","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.gen_salt","return_type":"text","arguments":"text, integer","type":"FUNCTION"},{"name":"auth.role","return_type":"text","arguments":"","type":"FUNCTION"},{"name":"extensions.uuid_generate_v5","return_type":"uuid","arguments":"namespace uuid, name text","type":"FUNCTION"},{"name":"extensions.digest","return_type":"bytea","arguments":"bytea, text","type":"FUNCTION"},{"name":"extensions.hmac","return_type":"bytea","arguments":"text, text, text","type":"FUNCTION"},{"name":"extensions.hmac","return_type":"bytea","arguments":"bytea, bytea, text","type":"FUNCTION"},{"name":"extensions.crypt","return_type":"text","arguments":"text, text","type":"FUNCTION"},{"name":"extensions.gen_salt","return_type":"text","arguments":"text","type":"FUNCTION"},{"name":"extensions.sign","return_type":"text","arguments":"payload json, secret text, algorithm text DEFAULT 'HS256'::text","type":"FUNCTION"},{"name":"extensions.pgrst_ddl_watch","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"graphql._internal_resolve","return_type":"jsonb","arguments":"query text, variables jsonb DEFAULT '{}'::jsonb, \"operationName\" text DEFAULT NULL::text, extensions jsonb DEFAULT NULL::jsonb","type":"FUNCTION"},{"name":"graphql.exception","return_type":"text","arguments":"message text","type":"FUNCTION"},{"name":"graphql.comment_directive","return_type":"jsonb","arguments":"comment_ text","type":"FUNCTION"},{"name":"extensions.pgrst_drop_watch","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"graphql_public.graphql","return_type":"jsonb","arguments":"\"operationName\" text DEFAULT NULL::text, query text DEFAULT NULL::text, variables jsonb DEFAULT NULL::jsonb, extensions jsonb DEFAULT NULL::jsonb","type":"FUNCTION"},{"name":"extensions.grant_pg_graphql_access","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"net.http_post","return_type":"int8","arguments":"url text, body jsonb DEFAULT '{}'::jsonb, params jsonb DEFAULT '{}'::jsonb, headers jsonb DEFAULT '{\"Content-Type\": \"application/json\"}'::jsonb, timeout_milliseconds integer DEFAULT 2000","type":"FUNCTION"},{"name":"pgsodium.crypto_pwhash_saltgen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_client_session_keys","return_type":"crypto_kx_session","arguments":"client_pk bytea, client_sk bytea, server_pk bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_server_session_keys","return_type":"crypto_kx_session","arguments":"server_pk bytea, server_sk bytea, client_pk bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_box_new_seed","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_new_seed","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.derive_key","return_type":"bytea","arguments":"key_id bigint, key_len integer DEFAULT 32, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.pgsodium_derive","return_type":"bytea","arguments":"key_id bigint, key_len integer DEFAULT 32, context bytea DEFAULT decode('pgsodium'::text, 'escape'::text)","type":"FUNCTION"},{"name":"pgsodium.randombytes_new_seed","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_box_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_shorthash_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_generichash_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kdf_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_new_keypair","return_type":"crypto_kx_keypair","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_new_seed","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_kx_seed_new_keypair","return_type":"crypto_kx_keypair","arguments":"seed bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_box_new_keypair","return_type":"crypto_box_keypair","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_new_keypair","return_type":"crypto_sign_keypair","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_init","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_update","return_type":"bytea","arguments":"state bytea, message bytea","type":"FUNCTION"},{"name":"pgsodium.randombytes_random","return_type":"int4","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_secretstream_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_cmp","return_type":"bool","arguments":"text, text","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_new_keypair","return_type":"crypto_signcrypt_keypair","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key bytea, nonce bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_decrypt","return_type":"bytea","arguments":"ciphertext bytea, additional bytea, key bytea, nonce bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea, nonce bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea, nonce bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.version","return_type":"text","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_noncegen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"pgsodium.has_mask","return_type":"bool","arguments":"role regrole, source_name text","type":"FUNCTION"},{"name":"pgsodium.mask_columns","return_type":"record","arguments":"source_relid oid","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_final_verify","return_type":"bool","arguments":"state bytea, signature bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.create_mask_view","return_type":"void","arguments":"relid oid, debug boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.create_key","return_type":"valid_key","arguments":"key_type pgsodium.key_type DEFAULT 'aead-det'::pgsodium.key_type, name text DEFAULT NULL::text, raw_key bytea DEFAULT NULL::bytea, raw_key_nonce bytea DEFAULT NULL::bytea, parent_key uuid DEFAULT NULL::uuid, key_context bytea DEFAULT '\\x7067736f6469756d'::bytea, expires timestamp with time zone DEFAULT NULL::timestamp with time zone, associated_data text DEFAULT ''::text","type":"FUNCTION"},{"name":"pgsodium.get_key_by_name","return_type":"valid_key","arguments":"text","type":"FUNCTION"},{"name":"pgsodium.quote_assoc","return_type":"text","arguments":"text, boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_open","return_type":"bytea","arguments":"signed_message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_kdf_derive_from_key","return_type":"bytea","arguments":"subkey_size integer, subkey_id bigint, context bytea, primary_key uuid","type":"FUNCTION"},{"name":"pgsodium.get_named_keys","return_type":"valid_key","arguments":"filter text DEFAULT '%'::text","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.get_key_by_id","return_type":"valid_key","arguments":"uuid","type":"FUNCTION"},{"name":"pgsodium.enable_security_label_trigger","return_type":"void","arguments":"","type":"FUNCTION"},{"name":"pgsodium.disable_security_label_trigger","return_type":"void","arguments":"","type":"FUNCTION"},{"name":"pgsodium.update_mask","return_type":"void","arguments":"target oid, debug boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_update_agg1","return_type":"bytea","arguments":"state bytea, message bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_update_agg2","return_type":"bytea","arguments":"cur_state bytea, initial_state bytea, message bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_update_agg","return_type":"bytea","arguments":"message bytea","type":"a"},{"name":"pgsodium.crypto_sign_update_agg","return_type":"bytea","arguments":"state bytea, message bytea","type":"a"},{"name":"pgsodium.encrypted_columns","return_type":"text","arguments":"relid oid","type":"FUNCTION"},{"name":"pgsodium.decrypted_columns","return_type":"text","arguments":"relid oid","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_ietf_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, nonce bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth","return_type":"bytea","arguments":"message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth","return_type":"bytea","arguments":"message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_verify","return_type":"bool","arguments":"mac bytea, message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_verify","return_type":"bool","arguments":"mac bytea, message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_verify","return_type":"bool","arguments":"mac bytea, message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_box_seed_new_keypair","return_type":"crypto_box_keypair","arguments":"seed bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_box","return_type":"bytea","arguments":"message bytea, nonce bytea, public bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_box_open","return_type":"bytea","arguments":"ciphertext bytea, nonce bytea, public bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_box_seal","return_type":"bytea","arguments":"message bytea, public_key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_box_seal_open","return_type":"bytea","arguments":"ciphertext bytea, public_key bytea, secret_key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_generichash","return_type":"bytea","arguments":"message bytea, key bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_generichash","return_type":"bytea","arguments":"message bytea, key bytea DEFAULT NULL::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_generichash","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_shorthash","return_type":"bytea","arguments":"message bytea, key bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_shorthash","return_type":"bytea","arguments":"message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_shorthash","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.sodium_bin2base64","return_type":"text","arguments":"bin bytea","type":"FUNCTION"},{"name":"pgsodium.sodium_base642bin","return_type":"bytea","arguments":"base64 text","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512","return_type":"bytea","arguments":"message bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512","return_type":"bytea","arguments":"message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512_verify","return_type":"bool","arguments":"hash bytea, message bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512_verify","return_type":"bool","arguments":"hash bytea, message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha512_verify","return_type":"bool","arguments":"signature bytea, message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256","return_type":"bytea","arguments":"message bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256","return_type":"bytea","arguments":"message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256","return_type":"bytea","arguments":"message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256_verify","return_type":"bool","arguments":"hash bytea, message bytea, secret bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_final_create","return_type":"bytea","arguments":"state bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256_verify","return_type":"bool","arguments":"hash bytea, message bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_auth_hmacsha256_verify","return_type":"bool","arguments":"signature bytea, message bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_kdf_derive_from_key","return_type":"bytea","arguments":"subkey_size bigint, subkey_id bigint, context bytea, primary_key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_pwhash","return_type":"bytea","arguments":"password bytea, salt bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_pwhash_str","return_type":"bytea","arguments":"password bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_pwhash_str_verify","return_type":"bool","arguments":"hashed_password bytea, password bytea","type":"FUNCTION"},{"name":"pgsodium.randombytes_uniform","return_type":"int4","arguments":"upper_bound integer","type":"FUNCTION"},{"name":"pgsodium.randombytes_buf","return_type":"bytea","arguments":"size integer","type":"FUNCTION"},{"name":"pgsodium.randombytes_buf_deterministic","return_type":"bytea","arguments":"size integer, seed bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox","return_type":"bytea","arguments":"message bytea, nonce bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox","return_type":"bytea","arguments":"message bytea, nonce bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox","return_type":"bytea","arguments":"message bytea, nonce bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_open","return_type":"bytea","arguments":"ciphertext bytea, nonce bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_open","return_type":"bytea","arguments":"message bytea, nonce bytea, key_id bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_secretbox_open","return_type":"bytea","arguments":"message bytea, nonce bytea, key_uuid uuid","type":"FUNCTION"},{"name":"pgsodium.crypto_hash_sha256","return_type":"bytea","arguments":"message bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_hash_sha512","return_type":"bytea","arguments":"message bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign","return_type":"bytea","arguments":"message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_detached","return_type":"bytea","arguments":"message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_seed_new_keypair","return_type":"crypto_sign_keypair","arguments":"seed bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_sign_verify_detached","return_type":"bool","arguments":"sig bytea, message bytea, key bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_sign_after","return_type":"bytea","arguments":"state bytea, sender_sk bytea, ciphertext bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_sign_before","return_type":"crypto_signcrypt_state_key","arguments":"sender bytea, recipient bytea, sender_sk bytea, recipient_pk bytea, additional bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_verify_after","return_type":"bool","arguments":"state bytea, signature bytea, sender_pk bytea, ciphertext bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_verify_before","return_type":"crypto_signcrypt_state_key","arguments":"signature bytea, sender bytea, recipient bytea, additional bytea, sender_pk bytea, recipient_sk bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_signcrypt_verify_public","return_type":"bool","arguments":"signature bytea, sender bytea, recipient bytea, additional bytea, sender_pk bytea, ciphertext bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20","return_type":"bytea","arguments":"bigint, bytea, bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20","return_type":"bytea","arguments":"bigint, bytea, bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_xor","return_type":"bytea","arguments":"bytea, bytea, bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_xor","return_type":"bytea","arguments":"bytea, bytea, bigint, context bytea DEFAULT '\\x70676f736469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_xor_ic","return_type":"bytea","arguments":"bytea, bytea, bigint, bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_stream_xchacha20_xor_ic","return_type":"bytea","arguments":"bytea, bytea, bigint, bigint, context bytea DEFAULT '\\x7067736f6469756d'::bytea","type":"FUNCTION"},{"name":"pgsodium.encrypted_column","return_type":"text","arguments":"relid oid, m record","type":"FUNCTION"},{"name":"pgsodium.update_masks","return_type":"void","arguments":"debug boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.key_encrypt_secret_raw_key","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"pgsodium.mask_role","return_type":"void","arguments":"masked_role regrole, source_name text, view_name text","type":"FUNCTION"},{"name":"pgsodium.create_mask_view","return_type":"void","arguments":"relid oid, subid integer, debug boolean DEFAULT false","type":"FUNCTION"},{"name":"pgsodium.trg_mask_update","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_decrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_uuid uuid, nonce bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_encrypt","return_type":"bytea","arguments":"message bytea, additional bytea, key_uuid uuid, nonce bytea","type":"FUNCTION"},{"name":"pgsodium.crypto_aead_det_keygen","return_type":"bytea","arguments":"","type":"FUNCTION"},{"name":"vault.secrets_encrypt_secret_secret","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"vault.create_secret","return_type":"uuid","arguments":"new_secret text, new_name text DEFAULT NULL::text, new_description text DEFAULT ''::text, new_key_id uuid DEFAULT NULL::uuid","type":"FUNCTION"},{"name":"vault.update_secret","return_type":"void","arguments":"secret_id uuid, new_secret text DEFAULT NULL::text, new_name text DEFAULT NULL::text, new_description text DEFAULT NULL::text, new_key_id uuid DEFAULT NULL::uuid","type":"FUNCTION"},{"name":"extensions.pgp_key_id","return_type":"text","arguments":"bytea","type":"FUNCTION"},{"name":"extensions.armor","return_type":"text","arguments":"bytea","type":"FUNCTION"},{"name":"extensions.armor","return_type":"text","arguments":"bytea, text[], text[]","type":"FUNCTION"},{"name":"extensions.dearmor","return_type":"bytea","arguments":"text","type":"FUNCTION"},{"name":"extensions.pgp_armor_headers","return_type":"record","arguments":"text, OUT key text, OUT value text","type":"FUNCTION"},{"name":"extensions.url_encode","return_type":"text","arguments":"data bytea","type":"FUNCTION"},{"name":"extensions.url_decode","return_type":"bytea","arguments":"data text","type":"FUNCTION"},{"name":"extensions.try_cast_double","return_type":"float8","arguments":"inp text","type":"FUNCTION"},{"name":"extensions.moddatetime","return_type":"trigger","arguments":"","type":"FUNCTION"},{"name":"extensions.pgp_sym_encrypt","return_type":"bytea","arguments":"text, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_encrypt_bytea","return_type":"bytea","arguments":"bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_encrypt","return_type":"bytea","arguments":"text, text, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_encrypt_bytea","return_type":"bytea","arguments":"bytea, text, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_decrypt","return_type":"text","arguments":"bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_decrypt_bytea","return_type":"bytea","arguments":"bytea, text","type":"FUNCTION"},{"name":"extensions.pgp_sym_decrypt","return_type":"text","arguments":"bytea, text, text","type":"FUNCTION"},{"name":"extensions.algorithm_sign","return_type":"text","arguments":"signables text, secret text, algorithm text","type":"FUNCTION"},{"name":"extensions.verify","return_type":"record","arguments":"token text, secret text, algorithm text DEFAULT 'HS256'::text","type":"FUNCTION"},{"name":"extensions.grant_pg_cron_access","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"extensions.grant_pg_net_access","return_type":"event_trigger","arguments":"","type":"FUNCTION"},{"name":"extensions.pg_stat_statements_reset","return_type":"void","arguments":"userid oid DEFAULT 0, dbid oid DEFAULT 0, queryid bigint DEFAULT 0","type":"FUNCTION"},{"name":"extensions.pg_stat_statements_info","return_type":"record","arguments":"OUT dealloc bigint, OUT stats_reset timestamp with time zone","type":"FUNCTION"},{"name":"extensions.pg_stat_statements","return_type":"record","arguments":"showtext boolean, OUT userid oid, OUT dbid oid, OUT toplevel boolean, OUT queryid bigint, OUT query text, OUT plans bigint, OUT total_plan_time double precision, OUT min_plan_time double precision, OUT max_plan_time double precision, OUT mean_plan_time double precision, OUT stddev_plan_time double precision, OUT calls bigint, OUT total_exec_time double precision, OUT min_exec_time double precision, OUT max_exec_time double precision, OUT mean_exec_time double precision, OUT stddev_exec_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT blk_read_time double precision, OUT blk_write_time double precision, OUT temp_blk_read_time double precision, OUT temp_blk_write_time double precision, OUT wal_records bigint, OUT wal_fpi bigint, OUT wal_bytes numeric, OUT jit_functions bigint, OUT jit_generation_time double precision, OUT jit_inlining_count bigint, OUT jit_inlining_time double precision, OUT jit_optimization_count bigint, OUT jit_optimization_time double precision, OUT jit_emission_count bigint, OUT jit_emission_time double precision","type":"FUNCTION"},{"name":"extensions.set_graphql_placeholder","return_type":"event_trigger","arguments":"","type":"FUNCTION"}],"driver":{"name":"postgres","database_version":"PostgreSQL 15.1 (Ubuntu 15.1-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 64-bit","meta":{"current_schema":"public","search_paths":["\"\\$user\"","public","extensions"],"dict":{"Functions":"Stored procedures and functions"}}}} diff --git a/docs/database/schema.svg b/docs/database/schema.svg index 3133522d5..7d67f2b18 100644 --- a/docs/database/schema.svg +++ b/docs/database/schema.svg @@ -535,44 +535,38 @@ public.app_config - - -public.app_config -     -[BASE TABLE] - -id     -[text] + + +public.app_config +     +[BASE TABLE] -app_min_version     -[text] +id     +[text] -app_playstore_url     -[text] +app_min_version     +[text] -app_appstore_url     -[text] +app_privacy     +[jsonb] -app_privacy     -[jsonb] +app_terms     +[jsonb] -app_terms     -[jsonb] +designer_privacy     +[jsonb] -designer_privacy     -[jsonb] +designer_terms     +[jsonb] -designer_terms     -[jsonb] +imprint     +[jsonb] -imprint     -[jsonb] +contact     +[jsonb] -contact     -[jsonb] - -analytics     -[jsonb] +analytics     +[jsonb]