/* columnar--9.5-1--10.0-1.sql */ CREATE SCHEMA cstore; SET search_path TO cstore; CREATE FUNCTION cstore_fdw_handler() RETURNS fdw_handler AS 'MODULE_PATHNAME' LANGUAGE C STRICT; CREATE FUNCTION cstore_fdw_validator(text[], oid) RETURNS void AS 'MODULE_PATHNAME' LANGUAGE C STRICT; CREATE FOREIGN DATA WRAPPER cstore_fdw HANDLER cstore_fdw_handler VALIDATOR cstore_fdw_validator; CREATE FUNCTION cstore_ddl_event_end_trigger() RETURNS event_trigger AS 'MODULE_PATHNAME' LANGUAGE C STRICT; CREATE EVENT TRIGGER cstore_ddl_event_end ON ddl_command_end EXECUTE PROCEDURE cstore_ddl_event_end_trigger(); CREATE FUNCTION public.cstore_table_size(relation regclass) RETURNS bigint AS 'MODULE_PATHNAME' LANGUAGE C STRICT; CREATE TABLE cstore_data_files ( relfilenode oid NOT NULL, block_row_count int NOT NULL, stripe_row_count int NOT NULL, compression name NOT NULL, version_major bigint NOT NULL, version_minor bigint NOT NULL, PRIMARY KEY (relfilenode) ) WITH (user_catalog_table = true); COMMENT ON TABLE cstore_data_files IS 'CStore data file wide metadata'; CREATE TABLE cstore_stripes ( relfilenode oid NOT NULL, stripe bigint NOT NULL, file_offset bigint NOT NULL, data_length bigint NOT NULL, column_count int NOT NULL, block_count int NOT NULL, block_row_count int NOT NULL, row_count bigint NOT NULL, PRIMARY KEY (relfilenode, stripe), FOREIGN KEY (relfilenode) REFERENCES cstore_data_files(relfilenode) ON DELETE CASCADE INITIALLY DEFERRED ) WITH (user_catalog_table = true); COMMENT ON TABLE cstore_stripes IS 'CStore per stripe metadata'; CREATE TABLE cstore_skipnodes ( relfilenode oid NOT NULL, stripe bigint NOT NULL, attr int NOT NULL, block int NOT NULL, row_count bigint NOT NULL, minimum_value bytea, maximum_value bytea, value_stream_offset bigint NOT NULL, value_stream_length bigint NOT NULL, exists_stream_offset bigint NOT NULL, exists_stream_length bigint NOT NULL, value_compression_type int NOT NULL, PRIMARY KEY (relfilenode, stripe, attr, block), FOREIGN KEY (relfilenode, stripe) REFERENCES cstore_stripes(relfilenode, stripe) ON DELETE CASCADE INITIALLY DEFERRED ) WITH (user_catalog_table = true); COMMENT ON TABLE cstore_skipnodes IS 'CStore per block metadata'; CREATE VIEW cstore_options AS SELECT c.oid::regclass regclass, d.block_row_count, d.stripe_row_count, d.compression FROM pg_class c JOIN cstore.cstore_data_files d USING(relfilenode); COMMENT ON VIEW cstore_options IS 'CStore per table settings'; DO $proc$ BEGIN -- from version 12 and up we have support for tableam's if installed on pg11 we can't -- create the objects here. Instead we rely on citus_finish_pg_upgrade to be called by the -- user instead to add the missing objects IF substring(current_Setting('server_version'), '\d+')::int >= 12 THEN EXECUTE $$ CREATE FUNCTION cstore_tableam_handler(internal) RETURNS table_am_handler LANGUAGE C AS 'MODULE_PATHNAME', 'cstore_tableam_handler'; CREATE ACCESS METHOD cstore_tableam TYPE TABLE HANDLER cstore_tableam_handler; CREATE FUNCTION pg_catalog.alter_cstore_table_set( table_name regclass, block_row_count int DEFAULT NULL, stripe_row_count int DEFAULT NULL, compression name DEFAULT null) RETURNS void LANGUAGE C AS 'MODULE_PATHNAME', 'alter_cstore_table_set'; CREATE FUNCTION pg_catalog.alter_cstore_table_reset( table_name regclass, block_row_count bool DEFAULT false, stripe_row_count bool DEFAULT false, compression bool DEFAULT false) RETURNS void LANGUAGE C AS 'MODULE_PATHNAME', 'alter_cstore_table_reset'; $$; END IF; END$proc$; RESET search_path;