diff --git a/packages/metaschema-schema/Makefile b/packages/metaschema-schema/Makefile index a7a2d43c..c92ebad4 100644 --- a/packages/metaschema-schema/Makefile +++ b/packages/metaschema-schema/Makefile @@ -1,5 +1,5 @@ EXTENSION = metaschema-schema -DATA = sql/metaschema-schema--0.15.5.sql +DATA = sql/metaschema-schema--0.31.0.sql PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/database/table.sql b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/database/table.sql index fbfd17e7..624a811d 100644 --- a/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/database/table.sql +++ b/packages/metaschema-schema/deploy/schemas/metaschema_public/tables/database/table.sql @@ -14,6 +14,10 @@ CREATE TABLE metaschema_public.database ( hash uuid, + -- Singleton flag marking the platform (constructive) database itself. + -- Write-once: first row to set it wins; immutable once true. + platform boolean NOT NULL DEFAULT false, + created_at timestamptz DEFAULT now(), updated_at timestamptz DEFAULT now(), @@ -23,6 +27,10 @@ CREATE TABLE metaschema_public.database ( ALTER TABLE metaschema_public.database ADD CONSTRAINT db_namechk CHECK (char_length(name) > 2); +CREATE UNIQUE INDEX databases_database_platform_singleton_idx + ON metaschema_public.database (platform) + WHERE platform; + COMMENT ON COLUMN metaschema_public.database.schema_hash IS '@omit'; COMMIT; diff --git a/packages/metaschema-schema/metaschema-schema.control b/packages/metaschema-schema/metaschema-schema.control index 89b4acdd..c15713e3 100644 --- a/packages/metaschema-schema/metaschema-schema.control +++ b/packages/metaschema-schema/metaschema-schema.control @@ -1,6 +1,6 @@ # metaschema-schema extension comment = 'metaschema-schema extension' -default_version = '0.15.5' +default_version = '0.31.0' module_pathname = '$libdir/metaschema-schema' requires = 'citext,hstore,pgpm-inflection,pgpm-database-jobs,pgpm-types,pgcrypto,plpgsql,postgis,uuid-ossp,pgpm-verify' relocatable = false diff --git a/packages/metaschema-schema/sql/metaschema-schema--0.15.5.sql b/packages/metaschema-schema/sql/metaschema-schema--0.31.0.sql similarity index 99% rename from packages/metaschema-schema/sql/metaschema-schema--0.15.5.sql rename to packages/metaschema-schema/sql/metaschema-schema--0.31.0.sql index 79a4487d..21d914d1 100644 --- a/packages/metaschema-schema/sql/metaschema-schema--0.15.5.sql +++ b/packages/metaschema-schema/sql/metaschema-schema--0.31.0.sql @@ -36,6 +36,7 @@ CREATE TABLE metaschema_public.database ( name text, label text, hash uuid, + platform boolean NOT NULL DEFAULT false, created_at timestamptz DEFAULT now(), updated_at timestamptz DEFAULT now(), UNIQUE (schema_hash) @@ -45,6 +46,8 @@ ALTER TABLE metaschema_public.database ADD CONSTRAINT db_namechk CHECK (char_length(name) > 2); +CREATE UNIQUE INDEX databases_database_platform_singleton_idx ON metaschema_public.database (platform) WHERE platform; + COMMENT ON COLUMN metaschema_public.database.schema_hash IS '@omit'; CREATE TABLE metaschema_public.schema ( diff --git a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/database/table.sql b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/database/table.sql index 2644ae25..387734c8 100644 --- a/packages/metaschema-schema/verify/schemas/metaschema_public/tables/database/table.sql +++ b/packages/metaschema-schema/verify/schemas/metaschema_public/tables/database/table.sql @@ -2,5 +2,6 @@ BEGIN; SELECT verify_table ('metaschema_public.database'); +SELECT verify_index ('metaschema_public.database', 'databases_database_platform_singleton_idx'); ROLLBACK; diff --git a/packages/services/__tests__/__snapshots__/services.test.ts.snap b/packages/services/__tests__/__snapshots__/services.test.ts.snap index 068e12f2..5bdc4077 100644 --- a/packages/services/__tests__/__snapshots__/services.test.ts.snap +++ b/packages/services/__tests__/__snapshots__/services.test.ts.snap @@ -8,6 +8,7 @@ exports[`services functionality should handle complete meta workflow with servic "label": null, "name": "my-meta-db", "owner_id": "[ID]", + "platform": false, "schema_hash": null, "updated_at": "[DATE]", }