@pgpm/metaschema-schema 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/LICENSE +22 -0
  2. package/Makefile +6 -0
  3. package/README.md +324 -0
  4. package/deploy/schemas/metaschema_private/schema.sql +12 -0
  5. package/deploy/schemas/metaschema_public/schema.sql +12 -0
  6. package/deploy/schemas/metaschema_public/tables/check_constraint/table.sql +33 -0
  7. package/deploy/schemas/metaschema_public/tables/database/indexes/databases_database_unique_name_idx.sql +20 -0
  8. package/deploy/schemas/metaschema_public/tables/database/table.sql +30 -0
  9. package/deploy/schemas/metaschema_public/tables/database_extension/table.sql +23 -0
  10. package/deploy/schemas/metaschema_public/tables/extension/table.sql +28 -0
  11. package/deploy/schemas/metaschema_public/tables/field/indexes/databases_field_uniq_names_idx.sql +13 -0
  12. package/deploy/schemas/metaschema_public/tables/field/table.sql +85 -0
  13. package/deploy/schemas/metaschema_public/tables/foreign_key_constraint/table.sql +40 -0
  14. package/deploy/schemas/metaschema_public/tables/full_text_search/table.sql +31 -0
  15. package/deploy/schemas/metaschema_public/tables/index/table.sql +39 -0
  16. package/deploy/schemas/metaschema_public/tables/limit_function/table.sql +34 -0
  17. package/deploy/schemas/metaschema_public/tables/policy/table.sql +41 -0
  18. package/deploy/schemas/metaschema_public/tables/primary_key_constraint/table.sql +30 -0
  19. package/deploy/schemas/metaschema_public/tables/procedure/table.sql +32 -0
  20. package/deploy/schemas/metaschema_public/tables/rls_function/table.sql +36 -0
  21. package/deploy/schemas/metaschema_public/tables/schema/table.sql +33 -0
  22. package/deploy/schemas/metaschema_public/tables/schema_grant/table.sql +27 -0
  23. package/deploy/schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx.sql +20 -0
  24. package/deploy/schemas/metaschema_public/tables/table/table.sql +55 -0
  25. package/deploy/schemas/metaschema_public/tables/table_grant/table.sql +27 -0
  26. package/deploy/schemas/metaschema_public/tables/trigger/table.sql +32 -0
  27. package/deploy/schemas/metaschema_public/tables/trigger_function/table.sql +23 -0
  28. package/deploy/schemas/metaschema_public/tables/unique_constraint/table.sql +37 -0
  29. package/metaschema-schema.control +7 -0
  30. package/package.json +41 -0
  31. package/pgpm.plan +29 -0
  32. package/revert/schemas/metaschema_private/schema.sql +7 -0
  33. package/revert/schemas/metaschema_public/schema.sql +6 -0
  34. package/revert/schemas/metaschema_public/tables/check_constraint/table.sql +7 -0
  35. package/revert/schemas/metaschema_public/tables/database/indexes/databases_database_unique_name_idx.sql +6 -0
  36. package/revert/schemas/metaschema_public/tables/database/table.sql +6 -0
  37. package/revert/schemas/metaschema_public/tables/database_extension/table.sql +7 -0
  38. package/revert/schemas/metaschema_public/tables/extension/table.sql +7 -0
  39. package/revert/schemas/metaschema_public/tables/field/indexes/databases_field_uniq_names_idx.sql +7 -0
  40. package/revert/schemas/metaschema_public/tables/field/table.sql +9 -0
  41. package/revert/schemas/metaschema_public/tables/foreign_key_constraint/table.sql +7 -0
  42. package/revert/schemas/metaschema_public/tables/full_text_search/table.sql +7 -0
  43. package/revert/schemas/metaschema_public/tables/index/table.sql +7 -0
  44. package/revert/schemas/metaschema_public/tables/limit_function/table.sql +7 -0
  45. package/revert/schemas/metaschema_public/tables/policy/table.sql +7 -0
  46. package/revert/schemas/metaschema_public/tables/primary_key_constraint/table.sql +7 -0
  47. package/revert/schemas/metaschema_public/tables/procedure/table.sql +7 -0
  48. package/revert/schemas/metaschema_public/tables/rls_function/table.sql +7 -0
  49. package/revert/schemas/metaschema_public/tables/schema/table.sql +7 -0
  50. package/revert/schemas/metaschema_public/tables/schema_grant/table.sql +7 -0
  51. package/revert/schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx.sql +6 -0
  52. package/revert/schemas/metaschema_public/tables/table/table.sql +6 -0
  53. package/revert/schemas/metaschema_public/tables/table_grant/table.sql +7 -0
  54. package/revert/schemas/metaschema_public/tables/trigger/table.sql +7 -0
  55. package/revert/schemas/metaschema_public/tables/trigger_function/table.sql +7 -0
  56. package/revert/schemas/metaschema_public/tables/unique_constraint/table.sql +7 -0
  57. package/revert/schemas/services_private/schema.sql +7 -0
  58. package/revert/schemas/services_public/schema.sql +7 -0
  59. package/revert/schemas/services_public/tables/api_extensions/table.sql +7 -0
  60. package/revert/schemas/services_public/tables/api_modules/table.sql +7 -0
  61. package/revert/schemas/services_public/tables/api_schemata/table.sql +7 -0
  62. package/revert/schemas/services_public/tables/apis/table.sql +7 -0
  63. package/revert/schemas/services_public/tables/apps/table.sql +7 -0
  64. package/revert/schemas/services_public/tables/domains/table.sql +7 -0
  65. package/revert/schemas/services_public/tables/site_metadata/table.sql +7 -0
  66. package/revert/schemas/services_public/tables/site_modules/table.sql +7 -0
  67. package/revert/schemas/services_public/tables/site_themes/table.sql +7 -0
  68. package/revert/schemas/services_public/tables/sites/table.sql +7 -0
  69. package/sql/metaschema-schema--0.15.5.sql +582 -0
  70. package/verify/schemas/metaschema_private/schema.sql +7 -0
  71. package/verify/schemas/metaschema_public/schema.sql +6 -0
  72. package/verify/schemas/metaschema_public/tables/check_constraint/table.sql +7 -0
  73. package/verify/schemas/metaschema_public/tables/database/indexes/databases_database_unique_name_idx.sql +6 -0
  74. package/verify/schemas/metaschema_public/tables/database/table.sql +6 -0
  75. package/verify/schemas/metaschema_public/tables/database_extension/table.sql +7 -0
  76. package/verify/schemas/metaschema_public/tables/extension/table.sql +7 -0
  77. package/verify/schemas/metaschema_public/tables/field/indexes/databases_field_uniq_names_idx.sql +7 -0
  78. package/verify/schemas/metaschema_public/tables/field/table.sql +6 -0
  79. package/verify/schemas/metaschema_public/tables/foreign_key_constraint/table.sql +7 -0
  80. package/verify/schemas/metaschema_public/tables/full_text_search/table.sql +7 -0
  81. package/verify/schemas/metaschema_public/tables/index/table.sql +7 -0
  82. package/verify/schemas/metaschema_public/tables/limit_function/table.sql +7 -0
  83. package/verify/schemas/metaschema_public/tables/policy/table.sql +7 -0
  84. package/verify/schemas/metaschema_public/tables/primary_key_constraint/table.sql +7 -0
  85. package/verify/schemas/metaschema_public/tables/procedure/table.sql +7 -0
  86. package/verify/schemas/metaschema_public/tables/rls_function/table.sql +7 -0
  87. package/verify/schemas/metaschema_public/tables/schema/table.sql +7 -0
  88. package/verify/schemas/metaschema_public/tables/schema_grant/table.sql +7 -0
  89. package/verify/schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx.sql +6 -0
  90. package/verify/schemas/metaschema_public/tables/table/table.sql +6 -0
  91. package/verify/schemas/metaschema_public/tables/table_grant/table.sql +7 -0
  92. package/verify/schemas/metaschema_public/tables/trigger/table.sql +7 -0
  93. package/verify/schemas/metaschema_public/tables/trigger_function/table.sql +7 -0
  94. package/verify/schemas/metaschema_public/tables/unique_constraint/table.sql +7 -0
  95. package/verify/schemas/services_private/schema.sql +7 -0
  96. package/verify/schemas/services_public/schema.sql +7 -0
  97. package/verify/schemas/services_public/tables/api_extensions/table.sql +7 -0
  98. package/verify/schemas/services_public/tables/api_modules/table.sql +7 -0
  99. package/verify/schemas/services_public/tables/api_schemata/table.sql +7 -0
  100. package/verify/schemas/services_public/tables/apis/table.sql +7 -0
  101. package/verify/schemas/services_public/tables/apps/table.sql +7 -0
  102. package/verify/schemas/services_public/tables/domains/table.sql +7 -0
  103. package/verify/schemas/services_public/tables/site_metadata/table.sql +7 -0
  104. package/verify/schemas/services_public/tables/site_modules/table.sql +7 -0
  105. package/verify/schemas/services_public/tables/site_themes/table.sql +7 -0
  106. package/verify/schemas/services_public/tables/sites/table.sql +7 -0
@@ -0,0 +1,31 @@
1
+ -- Deploy schemas/metaschema_public/tables/full_text_search/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+
5
+ BEGIN;
6
+
7
+ CREATE TABLE metaschema_public.full_text_search (
8
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
9
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
10
+
11
+ table_id uuid NOT NULL,
12
+ field_id uuid NOT NULL,
13
+ field_ids uuid[] NOT NULL,
14
+ weights text[] NOT NULL,
15
+ langs text[] NOT NULL,
16
+ --
17
+
18
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
19
+ CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE,
20
+
21
+ CHECK (cardinality(field_ids) = cardinality(weights) AND cardinality(weights) = cardinality(langs))
22
+ );
23
+
24
+ COMMENT ON CONSTRAINT table_fkey ON metaschema_public.full_text_search IS E'@omit manyToMany';
25
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.full_text_search IS E'@omit manyToMany';
26
+
27
+ CREATE INDEX full_text_search_table_id_idx ON metaschema_public.full_text_search ( table_id );
28
+ CREATE INDEX full_text_search_database_id_idx ON metaschema_public.full_text_search ( database_id );
29
+
30
+
31
+ COMMIT;
@@ -0,0 +1,39 @@
1
+ -- Deploy schemas/metaschema_public/tables/index/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/table/table
5
+ -- requires: schemas/metaschema_public/tables/database/table
6
+
7
+ BEGIN;
8
+
9
+ CREATE TABLE metaschema_public.index (
10
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
11
+ database_id uuid NOT NULL,
12
+ table_id uuid NOT NULL,
13
+ name text NOT NULL DEFAULT '',
14
+
15
+ field_ids uuid[],
16
+ include_field_ids uuid[],
17
+
18
+ access_method text NOT NULL DEFAULT 'BTREE',
19
+
20
+ index_params jsonb,
21
+ where_clause jsonb,
22
+ is_unique boolean NOT NULL default false,
23
+
24
+ --
25
+
26
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
27
+ CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE,
28
+
29
+ -- index names are UNIQUE across schemas, so for portability we will check against database_id
30
+ UNIQUE (database_id, name)
31
+ );
32
+
33
+ COMMENT ON CONSTRAINT table_fkey ON metaschema_public.index IS E'@omit manyToMany';
34
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.index IS E'@omit manyToMany';
35
+
36
+ CREATE INDEX index_table_id_idx ON metaschema_public.index ( table_id );
37
+ CREATE INDEX index_database_id_idx ON metaschema_public.index ( database_id );
38
+
39
+ COMMIT;
@@ -0,0 +1,34 @@
1
+ -- Deploy schemas/metaschema_public/tables/limit_function/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+
5
+ BEGIN;
6
+
7
+ CREATE TABLE metaschema_public.limit_function (
8
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
9
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
10
+
11
+ table_id uuid NOT NULL,
12
+
13
+ name text,
14
+ label text,
15
+ description text,
16
+
17
+ data jsonb,
18
+
19
+ security int default 0, -- 0 = invoker, 1 = definer
20
+
21
+ --
22
+
23
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
24
+ CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE,
25
+
26
+ UNIQUE (database_id, name)
27
+ );
28
+
29
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.limit_function IS E'@omit manyToMany';
30
+ COMMENT ON CONSTRAINT table_fkey ON metaschema_public.limit_function IS E'@omit manyToMany';
31
+ CREATE INDEX limit_function_table_id_idx ON metaschema_public.limit_function ( table_id );
32
+ CREATE INDEX limit_function_database_id_idx ON metaschema_public.limit_function ( database_id );
33
+
34
+ COMMIT;
@@ -0,0 +1,41 @@
1
+ -- Deploy schemas/metaschema_public/tables/policy/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/table/table
5
+
6
+ BEGIN;
7
+
8
+ CREATE TABLE metaschema_public.policy (
9
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
10
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
11
+
12
+ table_id uuid NOT NULL,
13
+ name text,
14
+ role_name text,
15
+ privilege text,
16
+
17
+ -- using_expression text,
18
+ -- check_expression text,
19
+ -- policy_text text,
20
+
21
+ permissive boolean default true,
22
+ disabled boolean default false,
23
+
24
+ template text,
25
+ data jsonb,
26
+
27
+ --
28
+
29
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
30
+ CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE,
31
+
32
+ UNIQUE (table_id, name)
33
+ );
34
+
35
+ COMMENT ON CONSTRAINT table_fkey ON metaschema_public.policy IS E'@omit manyToMany';
36
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.policy IS E'@omit manyToMany';
37
+
38
+ CREATE INDEX policy_table_id_idx ON metaschema_public.policy ( table_id );
39
+ CREATE INDEX policy_database_id_idx ON metaschema_public.policy ( database_id );
40
+
41
+ COMMIT;
@@ -0,0 +1,30 @@
1
+ -- Deploy schemas/metaschema_public/tables/primary_key_constraint/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+
5
+ BEGIN;
6
+
7
+ CREATE TABLE metaschema_public.primary_key_constraint (
8
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
9
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
10
+
11
+ table_id uuid NOT NULL,
12
+ name text,
13
+ type text,
14
+ field_ids uuid[] NOT NULL,
15
+ --
16
+
17
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
18
+ CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE,
19
+
20
+ UNIQUE(table_id, name),
21
+ CHECK (field_ids <> '{}')
22
+ );
23
+
24
+ COMMENT ON CONSTRAINT table_fkey ON metaschema_public.primary_key_constraint IS E'@omit manyToMany';
25
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.primary_key_constraint IS E'@omit manyToMany';
26
+
27
+ CREATE INDEX primary_key_constraint_table_id_idx ON metaschema_public.primary_key_constraint ( table_id );
28
+ CREATE INDEX primary_key_constraint_database_id_idx ON metaschema_public.primary_key_constraint ( database_id );
29
+
30
+ COMMIT;
@@ -0,0 +1,32 @@
1
+ -- Deploy schemas/metaschema_public/tables/procedure/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/database/table
5
+
6
+ BEGIN;
7
+
8
+ CREATE TABLE metaschema_public.procedure (
9
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
10
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
11
+
12
+ name text NOT NULL,
13
+
14
+ -- MAYBE MAKE A SPECIAL RLS functions for policy making...
15
+
16
+ -- can we make this all JSON?
17
+ argnames text[],
18
+ argtypes text[],
19
+ argdefaults text[],
20
+
21
+ lang_name text,
22
+ definition text,
23
+ --
24
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
25
+
26
+ UNIQUE (database_id, name)
27
+ );
28
+
29
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.procedure IS E'@omit manyToMany';
30
+ CREATE INDEX procedure_database_id_idx ON metaschema_public.procedure ( database_id );
31
+
32
+ COMMIT;
@@ -0,0 +1,36 @@
1
+ -- Deploy schemas/metaschema_public/tables/rls_function/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/database/table
5
+
6
+ BEGIN;
7
+
8
+ CREATE TABLE metaschema_public.rls_function (
9
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
10
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
11
+
12
+ table_id uuid NOT NULL,
13
+
14
+ name text,
15
+ label text,
16
+ description text,
17
+
18
+ data jsonb,
19
+
20
+ inline boolean default false,
21
+ security int default 0, -- 0 = invoker, 1 = definer (only when inline is false can we apply this)
22
+
23
+ --
24
+
25
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
26
+ CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE,
27
+
28
+ UNIQUE (database_id, name)
29
+ );
30
+
31
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.rls_function IS E'@omit manyToMany';
32
+ COMMENT ON CONSTRAINT table_fkey ON metaschema_public.rls_function IS E'@omit manyToMany';
33
+ CREATE INDEX rls_function_table_id_idx ON metaschema_public.rls_function ( table_id );
34
+ CREATE INDEX rls_function_database_id_idx ON metaschema_public.rls_function ( database_id );
35
+
36
+ COMMIT;
@@ -0,0 +1,33 @@
1
+ -- Deploy schemas/metaschema_public/tables/schema/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/database/table
5
+
6
+ BEGIN;
7
+
8
+ CREATE TABLE metaschema_public.schema (
9
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
10
+
11
+ database_id uuid NOT NULL,
12
+ name text NOT NULL,
13
+ schema_name text NOT NULL,
14
+ label text,
15
+ description text,
16
+ --
17
+
18
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
19
+
20
+ UNIQUE (database_id, name),
21
+ UNIQUE (schema_name)
22
+ );
23
+
24
+ -- TODO: build out services
25
+ -- COMMENT ON COLUMN metaschema_public.schema.schema_name IS '@omit';
26
+
27
+ ALTER TABLE metaschema_public.schema
28
+ ADD CONSTRAINT schema_namechk CHECK (char_length(name) > 2);
29
+
30
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.schema IS E'@omit manyToMany';
31
+ CREATE INDEX schema_database_id_idx ON metaschema_public.schema ( database_id );
32
+
33
+ COMMIT;
@@ -0,0 +1,27 @@
1
+ -- Deploy schemas/metaschema_public/tables/schema_grant/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/schema/table
5
+
6
+ BEGIN;
7
+
8
+ CREATE TABLE metaschema_public.schema_grant (
9
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
10
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
11
+
12
+ schema_id uuid NOT NULL,
13
+ grantee_name text NOT NULL,
14
+ --
15
+
16
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
17
+ CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE
18
+
19
+ );
20
+
21
+ COMMENT ON CONSTRAINT schema_fkey ON metaschema_public.schema_grant IS E'@omit manyToMany';
22
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.schema_grant IS E'@omit manyToMany';
23
+
24
+ CREATE INDEX schema_grant_schema_id_idx ON metaschema_public.schema_grant ( schema_id );
25
+ CREATE INDEX schema_grant_database_id_idx ON metaschema_public.schema_grant ( database_id );
26
+
27
+ COMMIT;
@@ -0,0 +1,20 @@
1
+ -- Deploy schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx to pg
2
+ -- requires: schemas/metaschema_public/schema
3
+ -- requires: schemas/metaschema_private/schema
4
+ -- requires: schemas/metaschema_public/tables/table/table
5
+
6
+ BEGIN;
7
+
8
+ CREATE FUNCTION metaschema_private.table_name_hash (name text)
9
+ RETURNS bytea
10
+ AS $BODY$
11
+ SELECT
12
+ DECODE(MD5(LOWER(inflection.plural (name))), 'hex');
13
+ $BODY$
14
+ LANGUAGE sql
15
+ IMMUTABLE;
16
+
17
+ CREATE UNIQUE INDEX databases_table_unique_name_idx ON metaschema_public.table (database_id, metaschema_private.table_name_hash (name));
18
+
19
+ COMMIT;
20
+
@@ -0,0 +1,55 @@
1
+ -- Deploy schemas/metaschema_public/tables/table/table to pg
2
+ -- requires: schemas/metaschema_public/schema
3
+ -- requires: schemas/metaschema_public/tables/database/table
4
+ -- requires: schemas/metaschema_public/tables/schema/table
5
+
6
+ BEGIN;
7
+
8
+ CREATE TYPE metaschema_public.table_category AS ENUM ('core', 'module', 'app');
9
+
10
+ CREATE TABLE metaschema_public.table (
11
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
12
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
13
+
14
+ schema_id uuid NOT NULL,
15
+
16
+ name text NOT NULL,
17
+
18
+ label text,
19
+ description text,
20
+
21
+ smart_tags jsonb,
22
+
23
+ category metaschema_public.table_category NOT NULL DEFAULT 'app',
24
+ module text NULL,
25
+ scope int NULL,
26
+
27
+ use_rls boolean NOT NULL DEFAULT FALSE,
28
+
29
+ timestamps boolean NOT NULL DEFAULT FALSE,
30
+ peoplestamps boolean NOT NULL DEFAULT FALSE,
31
+
32
+ plural_name text,
33
+ singular_name text,
34
+
35
+ tags citext[] NOT NULL DEFAULT '{}',
36
+
37
+ --
38
+
39
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
40
+ CONSTRAINT schema_fkey FOREIGN KEY (schema_id) REFERENCES metaschema_public.schema (id) ON DELETE CASCADE,
41
+
42
+ UNIQUE (database_id, name)
43
+ );
44
+
45
+ ALTER TABLE metaschema_public.table ADD COLUMN
46
+ inherits_id uuid NULL REFERENCES metaschema_public.table(id);
47
+
48
+ COMMENT ON CONSTRAINT schema_fkey ON metaschema_public.table IS E'@omit manyToMany';
49
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.table IS E'@omit manyToMany';
50
+
51
+ CREATE INDEX table_schema_id_idx ON metaschema_public.table ( schema_id );
52
+ CREATE INDEX table_database_id_idx ON metaschema_public.table ( database_id );
53
+
54
+ COMMIT;
55
+
@@ -0,0 +1,27 @@
1
+ -- Deploy schemas/metaschema_public/tables/table_grant/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/table/table
5
+
6
+ BEGIN;
7
+
8
+ CREATE TABLE metaschema_public.table_grant (
9
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
10
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
11
+
12
+ table_id uuid NOT NULL,
13
+ privilege text NOT NULL,
14
+ role_name text NOT NULL,
15
+ field_ids uuid[],
16
+ --
17
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
18
+ CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE
19
+ );
20
+
21
+ COMMENT ON CONSTRAINT table_fkey ON metaschema_public.table_grant IS E'@omit manyToMany';
22
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.table_grant IS E'@omit manyToMany';
23
+
24
+ CREATE INDEX table_grant_table_id_idx ON metaschema_public.table_grant ( table_id );
25
+ CREATE INDEX table_grant_database_id_idx ON metaschema_public.table_grant ( database_id );
26
+
27
+ COMMIT;
@@ -0,0 +1,32 @@
1
+ -- Deploy schemas/metaschema_public/tables/trigger/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/table/table
5
+
6
+ BEGIN;
7
+
8
+ -- https://www.postgresql.org/docs/12/sql-createtrigger.html
9
+
10
+ CREATE TABLE metaschema_public.trigger (
11
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
12
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
13
+
14
+ table_id uuid NOT NULL,
15
+ name text NOT NULL,
16
+ event text, -- INSERT, UPDATE, DELETE, or TRUNCATE
17
+ function_name text,
18
+ --
19
+
20
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
21
+ CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE,
22
+
23
+ UNIQUE(table_id, name)
24
+ );
25
+
26
+ COMMENT ON CONSTRAINT table_fkey ON metaschema_public.trigger IS E'@omit manyToMany';
27
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.trigger IS E'@omit manyToMany';
28
+
29
+ CREATE INDEX trigger_table_id_idx ON metaschema_public.trigger ( table_id );
30
+ CREATE INDEX trigger_database_id_idx ON metaschema_public.trigger ( database_id );
31
+
32
+ COMMIT;
@@ -0,0 +1,23 @@
1
+ -- Deploy schemas/metaschema_public/tables/trigger_function/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/database/table
5
+
6
+ BEGIN;
7
+
8
+ CREATE TABLE metaschema_public.trigger_function (
9
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
10
+ database_id uuid NOT NULL,
11
+
12
+ name text NOT NULL,
13
+ code text,
14
+
15
+ --
16
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
17
+ UNIQUE (database_id, name)
18
+ );
19
+
20
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.trigger_function IS E'@omit manyToMany';
21
+ CREATE INDEX trigger_function_database_id_idx ON metaschema_public.trigger_function ( database_id );
22
+
23
+ COMMIT;
@@ -0,0 +1,37 @@
1
+ -- Deploy schemas/metaschema_public/tables/unique_constraint/table to pg
2
+
3
+ -- requires: schemas/metaschema_public/schema
4
+ -- requires: schemas/metaschema_public/tables/database/table
5
+ -- requires: schemas/metaschema_public/tables/table/table
6
+
7
+ BEGIN;
8
+
9
+ CREATE TABLE metaschema_public.unique_constraint (
10
+ id uuid PRIMARY KEY DEFAULT uuid_generate_v4 (),
11
+ database_id uuid NOT NULL DEFAULT uuid_nil(),
12
+
13
+ table_id uuid NOT NULL,
14
+ name text,
15
+ description text,
16
+ smart_tags jsonb,
17
+ type text,
18
+ field_ids uuid[] NOT NULL,
19
+ --
20
+
21
+ CONSTRAINT db_fkey FOREIGN KEY (database_id) REFERENCES metaschema_public.database (id) ON DELETE CASCADE,
22
+ CONSTRAINT table_fkey FOREIGN KEY (table_id) REFERENCES metaschema_public.table (id) ON DELETE CASCADE,
23
+
24
+ -- TODO these are unique across schema, NOT table. We'll need to update this to have database_id
25
+ -- for portability
26
+
27
+ UNIQUE (table_id, name),
28
+ CHECK (field_ids <> '{}')
29
+ );
30
+
31
+ COMMENT ON CONSTRAINT table_fkey ON metaschema_public.unique_constraint IS E'@omit manyToMany';
32
+ COMMENT ON CONSTRAINT db_fkey ON metaschema_public.unique_constraint IS E'@omit manyToMany';
33
+
34
+ CREATE INDEX unique_constraint_table_id_idx ON metaschema_public.unique_constraint ( table_id );
35
+ CREATE INDEX unique_constraint_database_id_idx ON metaschema_public.unique_constraint ( database_id );
36
+
37
+ COMMIT;
@@ -0,0 +1,7 @@
1
+ # metaschema-schema extension
2
+ comment = 'metaschema-schema extension'
3
+ default_version = '0.15.5'
4
+ module_pathname = '$libdir/metaschema-schema'
5
+ requires = 'citext,hstore,pgpm-inflection,pgpm-database-jobs,pgpm-types,pgcrypto,plpgsql,postgis,uuid-ossp,pgpm-verify'
6
+ relocatable = false
7
+ superuser = false
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@pgpm/metaschema-schema",
3
+ "version": "0.16.0",
4
+ "description": "Database metadata utilities and introspection functions",
5
+ "author": "Dan Lynch <pyramation@gmail.com>",
6
+ "contributors": [
7
+ "Constructive <developers@constructive.io>"
8
+ ],
9
+ "keywords": [
10
+ "postgresql",
11
+ "pgpm",
12
+ "metadata",
13
+ "introspection"
14
+ ],
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "scripts": {
19
+ "bundle": "pgpm package",
20
+ "test": "jest",
21
+ "test:watch": "jest --watch"
22
+ },
23
+ "dependencies": {
24
+ "@pgpm/database-jobs": "0.16.0",
25
+ "@pgpm/inflection": "0.16.0",
26
+ "@pgpm/types": "0.16.0",
27
+ "@pgpm/verify": "0.16.0"
28
+ },
29
+ "devDependencies": {
30
+ "pgpm": "^1.3.0"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/constructive-io/pgpm-modules"
35
+ },
36
+ "homepage": "https://github.com/constructive-io/pgpm-modules",
37
+ "bugs": {
38
+ "url": "https://github.com/constructive-io/pgpm-modules/issues"
39
+ },
40
+ "gitHead": "3b2260bf7640d7194f237d556c7e5033bc7a9405"
41
+ }
package/pgpm.plan ADDED
@@ -0,0 +1,29 @@
1
+ %syntax-version=1.0.0
2
+ %project=metaschema-schema
3
+ %uri=metaschema-schema
4
+
5
+ schemas/metaschema_private/schema [pgpm-inflection:schemas/inflection/tables/inflection_rules/indexes/inflection_rules_type_idx pgpm-database-jobs:schemas/app_jobs/triggers/tg_add_job_with_row pgpm-types:schemas/public/domains/url] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_private/schema
6
+ schemas/metaschema_public/schema 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/schema
7
+ schemas/metaschema_public/tables/database/table [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/database/table
8
+ schemas/metaschema_public/tables/schema/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/schema/table
9
+ schemas/metaschema_public/tables/table/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/schema/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/table/table
10
+ schemas/metaschema_public/tables/check_constraint/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/check_constraint/table
11
+ schemas/metaschema_public/tables/extension/table [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/extension/table
12
+ schemas/metaschema_public/tables/database_extension/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/extension/table schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/database_extension/table
13
+ schemas/metaschema_public/tables/database/indexes/databases_database_unique_name_idx [schemas/metaschema_private/schema schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/database/indexes/databases_database_unique_name_idx
14
+ schemas/metaschema_public/tables/field/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/field/table
15
+ schemas/metaschema_public/tables/field/indexes/databases_field_uniq_names_idx [schemas/metaschema_public/schema schemas/metaschema_public/tables/field/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/field/indexes/databases_field_uniq_names_idx
16
+ schemas/metaschema_public/tables/foreign_key_constraint/table [schemas/metaschema_public/tables/field/table schemas/metaschema_public/tables/table/table schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/foreign_key_constraint/table
17
+ schemas/metaschema_public/tables/full_text_search/table [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/full_text_search/table
18
+ schemas/metaschema_public/tables/index/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/index/table
19
+ schemas/metaschema_public/tables/limit_function/table [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/limit_function/table
20
+ schemas/metaschema_public/tables/policy/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/policy/table
21
+ schemas/metaschema_public/tables/primary_key_constraint/table [schemas/metaschema_public/schema] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/primary_key_constraint/table
22
+ schemas/metaschema_public/tables/procedure/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/procedure/table
23
+ schemas/metaschema_public/tables/rls_function/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/rls_function/table
24
+ schemas/metaschema_public/tables/schema_grant/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/schema/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/schema_grant/table
25
+ schemas/metaschema_public/tables/table_grant/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/table_grant/table
26
+ schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx [schemas/metaschema_public/schema schemas/metaschema_private/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/table/indexes/databases_table_unique_name_idx
27
+ schemas/metaschema_public/tables/trigger_function/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/trigger_function/table
28
+ schemas/metaschema_public/tables/trigger/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/trigger/table
29
+ schemas/metaschema_public/tables/unique_constraint/table [schemas/metaschema_public/schema schemas/metaschema_public/tables/database/table schemas/metaschema_public/tables/table/table] 2017-08-11T08:11:51Z skitch <skitch@5b0c196eeb62> # add schemas/metaschema_public/tables/unique_constraint/table
@@ -0,0 +1,7 @@
1
+ -- Revert schemas/metaschema_private/schema from pg
2
+
3
+ BEGIN;
4
+
5
+ DROP SCHEMA metaschema_private CASCADE;
6
+
7
+ COMMIT;
@@ -0,0 +1,6 @@
1
+
2
+ BEGIN;
3
+
4
+ DROP SCHEMA metaschema_public CASCADE;
5
+
6
+ COMMIT;
@@ -0,0 +1,7 @@
1
+ -- Revert schemas/metaschema_public/tables/check_constraint/table from pg
2
+
3
+ BEGIN;
4
+
5
+ DROP TABLE metaschema_public.check_constraint;
6
+
7
+ COMMIT;
@@ -0,0 +1,6 @@
1
+
2
+ BEGIN;
3
+
4
+ DROP INDEX metaschema_public.databases_database_unique_name_idx;
5
+
6
+ COMMIT;
@@ -0,0 +1,6 @@
1
+
2
+ BEGIN;
3
+
4
+ DROP TABLE metaschema_public.database;
5
+
6
+ COMMIT;
@@ -0,0 +1,7 @@
1
+ -- Revert schemas/metaschema_public/tables/database_extension/table from pg
2
+
3
+ BEGIN;
4
+
5
+ DROP TABLE metaschema_public.database_extension;
6
+
7
+ COMMIT;
@@ -0,0 +1,7 @@
1
+ -- Revert schemas/metaschema_public/tables/extension/table from pg
2
+
3
+ BEGIN;
4
+
5
+ DROP TABLE metaschema_public.extension;
6
+
7
+ COMMIT;