citus/src/test/regress/expected/multi_generate_ddl_commands...

231 lines
11 KiB
Plaintext

SET citus.next_shard_id TO 610000;
-- ===================================================================
-- test ddl command generation functionality
-- ===================================================================
-- first make sure a simple table works
CREATE TABLE simple_table (
first_name text,
last_name text,
id bigint
);
SELECT master_get_table_ddl_events('simple_table');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.simple_table (first_name text, last_name text, id bigint)
ALTER TABLE public.simple_table OWNER TO postgres
(2 rows)
-- ensure not-null constraints are propagated
CREATE TABLE not_null_table (
city text,
id bigint not null
);
SELECT master_get_table_ddl_events('not_null_table');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.not_null_table (city text, id bigint NOT NULL)
ALTER TABLE public.not_null_table OWNER TO postgres
(2 rows)
-- even more complex constraints should be preserved...
CREATE TABLE column_constraint_table (
first_name text,
last_name text,
age int CONSTRAINT non_negative_age CHECK (age >= 0)
);
SELECT master_get_table_ddl_events('column_constraint_table');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.column_constraint_table (first_name text, last_name text, age integer, CONSTRAINT non_negative_age CHECK ((age >= 0)))
ALTER TABLE public.column_constraint_table OWNER TO postgres
(2 rows)
-- including table constraints
CREATE TABLE table_constraint_table (
bid_item_id bigint,
min_bid decimal not null,
max_bid decimal not null,
CONSTRAINT bids_ordered CHECK (min_bid > max_bid)
);
SELECT master_get_table_ddl_events('table_constraint_table');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.table_constraint_table (bid_item_id bigint, min_bid numeric NOT NULL, max_bid numeric NOT NULL, CONSTRAINT bids_ordered CHECK ((min_bid > max_bid)))
ALTER TABLE public.table_constraint_table OWNER TO postgres
(2 rows)
-- tables with "simple" CHECK constraints should be able to be distributed
CREATE TABLE check_constraint_table_1(
id int,
b boolean,
CHECK(b)
);
SELECT create_distributed_table('check_constraint_table_1', 'id');
create_distributed_table
---------------------------------------------------------------------
(1 row)
SELECT master_get_table_ddl_events('check_constraint_table_1');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.check_constraint_table_1 (id integer, b boolean, CONSTRAINT check_constraint_table_1_b_check CHECK (b))
ALTER TABLE public.check_constraint_table_1 OWNER TO postgres
(2 rows)
-- including hardcoded Booleans
CREATE TABLE check_constraint_table_2(
id int CHECK(true)
);
SELECT create_distributed_table('check_constraint_table_2', 'id');
create_distributed_table
---------------------------------------------------------------------
(1 row)
SELECT master_get_table_ddl_events('check_constraint_table_2');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.check_constraint_table_2 (id integer, CONSTRAINT check_constraint_table_2_check CHECK (true))
ALTER TABLE public.check_constraint_table_2 OWNER TO postgres
(2 rows)
-- default values are supported
CREATE TABLE default_value_table (
name text,
price decimal default 0.00
);
SELECT master_get_table_ddl_events('default_value_table');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.default_value_table (name text, price numeric DEFAULT 0.00)
ALTER TABLE public.default_value_table OWNER TO postgres
(2 rows)
-- of course primary keys work...
CREATE TABLE pkey_table (
first_name text,
last_name text,
id bigint PRIMARY KEY
);
SELECT master_get_table_ddl_events('pkey_table');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.pkey_table (first_name text, last_name text, id bigint NOT NULL)
ALTER TABLE public.pkey_table OWNER TO postgres
ALTER TABLE public.pkey_table ADD CONSTRAINT pkey_table_pkey PRIMARY KEY (id)
(3 rows)
-- as do unique indexes...
CREATE TABLE unique_table (
user_id bigint not null,
username text UNIQUE not null
);
SELECT master_get_table_ddl_events('unique_table');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.unique_table (user_id bigint NOT NULL, username text NOT NULL)
ALTER TABLE public.unique_table OWNER TO postgres
ALTER TABLE public.unique_table ADD CONSTRAINT unique_table_username_key UNIQUE (username)
(3 rows)
-- and indexes used for clustering
CREATE TABLE clustered_table (
data json not null,
received_at timestamp not null
);
CREATE INDEX clustered_time_idx ON clustered_table (received_at);
CLUSTER clustered_table USING clustered_time_idx;
SELECT master_get_table_ddl_events('clustered_table');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.clustered_table (data json NOT NULL, received_at timestamp without time zone NOT NULL)
ALTER TABLE public.clustered_table OWNER TO postgres
CREATE INDEX clustered_time_idx ON public.clustered_table USING btree (received_at)
ALTER TABLE public.clustered_table CLUSTER ON clustered_time_idx
(4 rows)
-- fiddly things like storage type and statistics also work
CREATE TABLE fiddly_table (
hostname char(255) not null,
os char(255) not null,
ip_addr inet not null,
traceroute text not null
);
ALTER TABLE fiddly_table
ALTER hostname SET STORAGE PLAIN,
ALTER os SET STORAGE MAIN,
ALTER ip_addr SET STORAGE EXTENDED,
ALTER traceroute SET STORAGE EXTERNAL,
ALTER ip_addr SET STATISTICS 500;
SELECT master_get_table_ddl_events('fiddly_table');
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE TABLE public.fiddly_table (hostname character(255) NOT NULL, os character(255) NOT NULL, ip_addr inet NOT NULL, traceroute text NOT NULL)
ALTER TABLE ONLY public.fiddly_table ALTER COLUMN hostname SET STORAGE PLAIN, ALTER COLUMN os SET STORAGE MAIN, ALTER COLUMN ip_addr SET STORAGE EXTENDED, ALTER COLUMN ip_addr SET STATISTICS 500, ALTER COLUMN traceroute SET STORAGE EXTERNAL
ALTER TABLE public.fiddly_table OWNER TO postgres
(3 rows)
-- test foreign tables using fake FDW
CREATE FOREIGN TABLE foreign_table (
id bigint not null,
full_name text not null default ''
) SERVER fake_fdw_server OPTIONS (encoding 'utf-8', compression 'true');
SELECT create_distributed_table('foreign_table', 'id');
NOTICE: foreign-data wrapper "fake_fdw" does not have an extension defined
create_distributed_table
---------------------------------------------------------------------
(1 row)
ALTER FOREIGN TABLE foreign_table rename to renamed_foreign_table_with_long_name_12345678901234567890123456789012345678901234567890;
NOTICE: identifier "renamed_foreign_table_with_long_name_12345678901234567890123456789012345678901234567890" will be truncated to "renamed_foreign_table_with_long_name_12345678901234567890123456"
ALTER FOREIGN TABLE renamed_foreign_table_with_long_name_12345678901234567890123456789012345678901234567890 rename full_name to rename_name;
NOTICE: identifier "renamed_foreign_table_with_long_name_12345678901234567890123456789012345678901234567890" will be truncated to "renamed_foreign_table_with_long_name_12345678901234567890123456"
ALTER FOREIGN TABLE renamed_foreign_table_with_long_name_12345678901234567890123456789012345678901234567890 alter rename_name type char(8);
NOTICE: identifier "renamed_foreign_table_with_long_name_12345678901234567890123456789012345678901234567890" will be truncated to "renamed_foreign_table_with_long_name_12345678901234567890123456"
\c - - :public_worker_1_host :worker_1_port
select table_name, column_name, data_type
from information_schema.columns
where table_schema='public' and table_name like 'renamed_foreign_table_%' and column_name <> 'id'
order by table_name;
table_name | column_name | data_type
---------------------------------------------------------------------
renamed_foreign_table_with_long_name_1234567890_6a8dd6f8_610008 | rename_name | character
renamed_foreign_table_with_long_name_1234567890_6a8dd6f8_610009 | rename_name | character
renamed_foreign_table_with_long_name_1234567890_6a8dd6f8_610010 | rename_name | character
renamed_foreign_table_with_long_name_1234567890_6a8dd6f8_610011 | rename_name | character
(4 rows)
\c - - :master_host :master_port
SELECT master_get_table_ddl_events('renamed_foreign_table_with_long_name_12345678901234567890123456789012345678901234567890');
NOTICE: foreign-data wrapper "fake_fdw" does not have an extension defined
master_get_table_ddl_events
---------------------------------------------------------------------
CREATE SERVER IF NOT EXISTS fake_fdw_server FOREIGN DATA WRAPPER fake_fdw
CREATE FOREIGN TABLE public.renamed_foreign_table_with_long_name_12345678901234567890123456 (id bigint NOT NULL, rename_name character(8) DEFAULT ''::text NOT NULL) SERVER fake_fdw_server OPTIONS (encoding 'utf-8', compression 'true')
ALTER TABLE public.renamed_foreign_table_with_long_name_12345678901234567890123456 OWNER TO postgres
(3 rows)
-- propagating views is not supported
CREATE VIEW local_view AS SELECT * FROM simple_table;
SELECT master_get_table_ddl_events('local_view');
ERROR: local_view is not a regular, foreign or partitioned table
-- clean up
DROP VIEW IF EXISTS local_view;
DROP FOREIGN TABLE IF EXISTS renamed_foreign_table_with_long_name_12345678901234567890123456789012345678901234567890;
NOTICE: identifier "renamed_foreign_table_with_long_name_12345678901234567890123456789012345678901234567890" will be truncated to "renamed_foreign_table_with_long_name_12345678901234567890123456"
\c - - :public_worker_1_host :worker_1_port
select table_name, column_name, data_type
from information_schema.columns
where table_schema='public' and table_name like 'renamed_foreign_table_%' and column_name <> 'id'
order by table_name;
table_name | column_name | data_type
---------------------------------------------------------------------
(0 rows)
\c - - :master_host :master_port
DROP TABLE IF EXISTS simple_table, not_null_table, column_constraint_table,
table_constraint_table, default_value_table, pkey_table,
unique_table, clustered_table, fiddly_table;