mirror of https://github.com/citusdata/citus.git
114 lines
3.2 KiB
PL/PgSQL
114 lines
3.2 KiB
PL/PgSQL
/* cstore_fdw/cstore_fdw--1.7.sql */
|
|
|
|
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
|
\echo Use "CREATE EXTENSION cstore_fdw" to load this file. \quit
|
|
|
|
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 OR REPLACE FUNCTION cstore_clean_table_resources(oid)
|
|
RETURNS void
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE C STRICT;
|
|
|
|
CREATE OR REPLACE FUNCTION cstore_drop_trigger()
|
|
RETURNS event_trigger
|
|
LANGUAGE plpgsql
|
|
AS $csdt$
|
|
DECLARE v_obj record;
|
|
BEGIN
|
|
FOR v_obj IN SELECT * FROM pg_event_trigger_dropped_objects() LOOP
|
|
|
|
IF v_obj.object_type NOT IN ('table', 'foreign table') THEN
|
|
CONTINUE;
|
|
END IF;
|
|
|
|
PERFORM cstore.cstore_clean_table_resources(v_obj.objid);
|
|
|
|
END LOOP;
|
|
END;
|
|
$csdt$;
|
|
|
|
CREATE EVENT TRIGGER cstore_drop_event
|
|
ON SQL_DROP
|
|
EXECUTE PROCEDURE cstore_drop_trigger();
|
|
|
|
CREATE TABLE cstore_tables (
|
|
relid oid NOT NULL,
|
|
block_row_count int NOT NULL,
|
|
version_major bigint NOT NULL,
|
|
version_minor bigint NOT NULL,
|
|
PRIMARY KEY (relid)
|
|
) WITH (user_catalog_table = true);
|
|
|
|
COMMENT ON TABLE cstore_tables IS 'CStore table wide metadata';
|
|
|
|
CREATE TABLE cstore_stripes (
|
|
relid oid NOT NULL,
|
|
stripe bigint NOT NULL,
|
|
file_offset bigint NOT NULL,
|
|
data_length bigint NOT NULL,
|
|
block_count int NOT NULL,
|
|
row_count bigint NOT NULL,
|
|
PRIMARY KEY (relid, stripe),
|
|
FOREIGN KEY (relid) REFERENCES cstore_tables(relid) ON DELETE CASCADE INITIALLY DEFERRED
|
|
) WITH (user_catalog_table = true);
|
|
|
|
COMMENT ON TABLE cstore_tables IS 'CStore per stripe metadata';
|
|
|
|
CREATE TABLE cstore_stripe_attr (
|
|
relid oid NOT NULL,
|
|
stripe bigint NOT NULL,
|
|
attr int NOT NULL,
|
|
exists_size bigint NOT NULL,
|
|
value_size bigint NOT NULL,
|
|
PRIMARY KEY (relid, stripe, attr),
|
|
FOREIGN KEY (relid, stripe) REFERENCES cstore_stripes(relid, stripe) ON DELETE CASCADE INITIALLY DEFERRED
|
|
) WITH (user_catalog_table = true);
|
|
|
|
COMMENT ON TABLE cstore_tables IS 'CStore per stripe/column combination metadata';
|
|
|
|
CREATE TABLE cstore_skipnodes (
|
|
relid 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 (relid, stripe, attr, block),
|
|
FOREIGN KEY (relid, stripe, attr) REFERENCES cstore_stripe_attr(relid, stripe, attr) ON DELETE CASCADE INITIALLY DEFERRED
|
|
) WITH (user_catalog_table = true);
|
|
|
|
COMMENT ON TABLE cstore_tables IS 'CStore per block metadata';
|