Schema 1.2.0: meta.series_schemas registry; lower-case name checks
- meta.series_schemas (name, description, created_at, created_by), seeded with 'series'. FK series_db_schema_fkey from meta.series.db_schema: a series may only live in a registered schema, for every client. Unregistered schemas belong to the user and are never touched. - CHECK series_schemas_name_check and series_table_name_check enforce the shared lower-case identifier rule in the database. - meta.find_schema_problems() covers the registry and reports a registered schema that no longer exists; user schemas are not examined. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
155fc7c3dd
commit
4c067bc4b9
7 changed files with 59 additions and 5 deletions
|
|
@ -21,6 +21,23 @@ ALTER TABLE meta.currencies ADD CONSTRAINT currencies_pkey PRIMARY KEY (code);
|
|||
ALTER TABLE meta.security_types ADD CONSTRAINT security_types_pkey PRIMARY KEY (code);
|
||||
ALTER TABLE meta.timezones ADD CONSTRAINT timezones_pkey PRIMARY KEY (iana_name);
|
||||
|
||||
-- Series schema registry. Names follow the table-name rule shared by both
|
||||
-- clients: lower case, [a-z_][a-z0-9_]*, at most 63 bytes, never quoted.
|
||||
ALTER TABLE meta.series_schemas ADD CONSTRAINT series_schemas_pkey PRIMARY KEY (name);
|
||||
ALTER TABLE meta.series_schemas ADD CONSTRAINT series_schemas_name_check
|
||||
CHECK (name ~ '^[a-z_][a-z0-9_]*$' AND octet_length(name) <= 63);
|
||||
|
||||
-- A series may only live in a registered schema -- enforced here, so no
|
||||
-- client can bypass it. RESTRICT: a schema cannot be unregistered while it
|
||||
-- still holds series.
|
||||
ALTER TABLE meta.series ADD CONSTRAINT series_db_schema_fkey
|
||||
FOREIGN KEY (db_schema) REFERENCES meta.series_schemas (name)
|
||||
ON UPDATE RESTRICT ON DELETE RESTRICT;
|
||||
|
||||
-- Table names follow the same rule (Core contract 6 in both clients).
|
||||
ALTER TABLE meta.series ADD CONSTRAINT series_table_name_check
|
||||
CHECK (table_name ~ '^[a-z_][a-z0-9_]*$' AND octet_length(table_name) <= 63);
|
||||
|
||||
CREATE INDEX idx_event_log_series_timestamp ON log.event_log USING btree (series_name, "timestamp" DESC);
|
||||
|
||||
CREATE INDEX idx_event_log_timestamp ON log.event_log USING btree ("timestamp" DESC);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue