- 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>
155 lines
4.7 KiB
SQL
155 lines
4.7 KiB
SQL
-- Meta schema tables
|
|
-- Generated: 2025-10-15T12:24:56.295509
|
|
|
|
CREATE UNLOGGED TABLE log.pending_changes (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
"timestamp" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
|
|
series_name TEXT NOT NULL,
|
|
db_schema TEXT NOT NULL,
|
|
op_type TEXT NOT NULL,
|
|
db_user TEXT DEFAULT CURRENT_USER,
|
|
details JSONB
|
|
);
|
|
|
|
CREATE TABLE log.event_log (
|
|
id BIGINT NOT NULL DEFAULT nextval('log.event_log_id_seq'),
|
|
"timestamp" TIMESTAMPTZ,
|
|
series_name TEXT NOT NULL,
|
|
db_schema TEXT NOT NULL,
|
|
event_type TEXT NOT NULL,
|
|
details JSONB,
|
|
source TEXT,
|
|
db_user TEXT,
|
|
PRIMARY KEY (id)
|
|
);
|
|
|
|
CREATE TABLE meta.currencies (
|
|
code character varying(3) NOT NULL,
|
|
name character varying(100) NOT NULL,
|
|
symbol character varying(10),
|
|
decimal_places integer DEFAULT 2,
|
|
notes text
|
|
);
|
|
|
|
CREATE TABLE meta.exchanges (
|
|
id character varying(12) NOT NULL,
|
|
name character varying(50),
|
|
timezone character varying(35),
|
|
currency character varying(3),
|
|
default_sec_type character varying(18),
|
|
default_session character varying(40),
|
|
default_holiday_calendar character varying(40),
|
|
default_tick_size double precision,
|
|
default_tick_value double precision,
|
|
default_extended_hours boolean DEFAULT false,
|
|
country character varying(3)
|
|
);
|
|
|
|
CREATE TABLE meta.holidays (
|
|
calendar_name character varying(50) NOT NULL,
|
|
date date NOT NULL,
|
|
description character varying(255),
|
|
early_close boolean NOT NULL DEFAULT false,
|
|
PRIMARY KEY (calendar_name, date)
|
|
);
|
|
|
|
CREATE TABLE meta.instruments (
|
|
symbol character varying(12) NOT NULL,
|
|
exchange character varying(12) NOT NULL,
|
|
name character varying(50) NOT NULL,
|
|
type character varying(10),
|
|
tick_size double precision,
|
|
tick_value double precision,
|
|
expiry character varying(20),
|
|
strike double precision,
|
|
currency character varying(3),
|
|
session character varying(40),
|
|
holiday_calendar character varying(50),
|
|
sec_id character varying(50),
|
|
sec_id_type character varying(20),
|
|
description character varying(255),
|
|
country character varying(3),
|
|
extended_hours boolean,
|
|
sector character varying(50),
|
|
industry character varying(100),
|
|
category character varying(50),
|
|
subcategory character varying(50),
|
|
asset_class character varying(30),
|
|
geography character varying(30),
|
|
underlying character varying(30)
|
|
);
|
|
|
|
CREATE TABLE meta.security_types (
|
|
code character varying(10) NOT NULL,
|
|
name character varying(50) NOT NULL,
|
|
description text,
|
|
notes text
|
|
);
|
|
|
|
CREATE TABLE meta.schema_version (
|
|
version character varying(20) NOT NULL,
|
|
installed_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
description text
|
|
);
|
|
|
|
CREATE TABLE meta.series (
|
|
table_id integer DEFAULT nextval('meta._table_meta__table_id_seq'::regclass) NOT NULL,
|
|
db_schema character varying(70) NOT NULL,
|
|
table_name character varying(70) NOT NULL,
|
|
type character varying(30),
|
|
description character varying(255),
|
|
column_schema text DEFAULT ''::text,
|
|
symbol character varying(30),
|
|
root_symbol character varying(30),
|
|
exchange character varying(30),
|
|
frequency character varying(30),
|
|
session text,
|
|
sec_type character varying(30),
|
|
sec_id character varying(30),
|
|
sec_id_type character varying(30),
|
|
create_timestamp timestamp without time zone DEFAULT CURRENT_TIMESTAMP,
|
|
num_records bigint,
|
|
first_timestamp timestamp without time zone,
|
|
last_timestamp timestamp without time zone,
|
|
bar_type character varying(30),
|
|
feed character varying(30),
|
|
currency character varying(30),
|
|
expiry character varying(30),
|
|
roll_type character varying(30),
|
|
feed_type character varying(30),
|
|
user_attr text,
|
|
user_attr_2 text,
|
|
script text,
|
|
notes text,
|
|
timezone character varying(50),
|
|
category character varying(30),
|
|
subcategory character varying(30),
|
|
json JSONB,
|
|
needs_reindex boolean NOT NULL DEFAULT false
|
|
);
|
|
|
|
CREATE TABLE meta.sessions (
|
|
name character varying(50) NOT NULL,
|
|
definition text NOT NULL,
|
|
"json" text,
|
|
exchange_id character varying(12) NOT NULL
|
|
);
|
|
|
|
-- Registry of series schemas. A series may only live in a registered schema
|
|
-- (FK from meta.series.db_schema, 04_indexes.sql). Every other schema in the
|
|
-- database belongs to the user and is never touched by the clients.
|
|
CREATE TABLE meta.series_schemas (
|
|
name text NOT NULL,
|
|
description text,
|
|
created_at timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
created_by text NOT NULL DEFAULT CURRENT_USER
|
|
);
|
|
|
|
CREATE TABLE meta.timezones (
|
|
iana_name character varying(50) NOT NULL,
|
|
display_name character varying(100) NOT NULL,
|
|
description text,
|
|
region character varying(50),
|
|
utc_offset_hours real,
|
|
notes text
|
|
);
|