tsapi-seriesdb-shared-sql/sql/03_tables.sql
peter eed06559c0 Canonical TSAPI series DB schema v1.0.0
Single source of truth for the timeseries PostgreSQL schema shared by the
Python (TSAPI_SERIESDB_PG_PY) and C++ (TSAPI_POSTGRES_CPP) libraries. SQL
seeded byte-for-byte from TSAPI_SERIESDB_PG_PY/tsapi_pgdb/sql on 2026-09-02.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-02 17:27:26 +01:00

145 lines
4.3 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
);
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
);