mirror of https://github.com/citusdata/citus.git
74 lines
3.3 KiB
PL/PgSQL
74 lines
3.3 KiB
PL/PgSQL
CREATE SCHEMA alter_table_add_column;
|
|
SET search_path TO alter_table_add_column;
|
|
|
|
SET citus.next_shard_id TO 1830000;
|
|
SET citus.shard_replication_factor TO 1;
|
|
|
|
SET client_min_messages TO NOTICE;
|
|
|
|
CREATE TABLE referenced (int_col integer PRIMARY KEY);
|
|
CREATE TABLE referencing (text_col text);
|
|
SELECT create_distributed_table('referenced', null);
|
|
SELECT create_distributed_table('referencing', null);
|
|
|
|
CREATE SCHEMA alter_table_add_column_other_schema;
|
|
|
|
CREATE OR REPLACE FUNCTION alter_table_add_column_other_schema.my_random(numeric)
|
|
RETURNS numeric AS
|
|
$$
|
|
BEGIN
|
|
RETURN 7 * $1;
|
|
END;
|
|
$$
|
|
LANGUAGE plpgsql IMMUTABLE;
|
|
|
|
CREATE COLLATION caseinsensitive (
|
|
provider = icu,
|
|
locale = 'und-u-ks-level2'
|
|
);
|
|
|
|
CREATE TYPE "simple_!\'custom_type" AS (a integer, b integer);
|
|
|
|
ALTER TABLE referencing ADD COLUMN test_1 integer DEFAULT (alter_table_add_column_other_schema.my_random(7) + random() + 5) NOT NULL CONSTRAINT fkey REFERENCES referenced(int_col) ON UPDATE SET DEFAULT ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
|
|
ALTER TABLE referencing ADD COLUMN test_2 integer UNIQUE REFERENCES referenced(int_col) ON UPDATE CASCADE ON DELETE SET DEFAULT NOT DEFERRABLE INITIALLY IMMEDIATE;
|
|
ALTER TABLE referencing ADD COLUMN test_3 integer GENERATED ALWAYS AS (test_1 * alter_table_add_column_other_schema.my_random(1)) STORED UNIQUE REFERENCES referenced(int_col) MATCH FULL;
|
|
ALTER TABLE referencing ADD COLUMN test_4 integer PRIMARY KEY WITH (fillfactor=70) NOT NULL REFERENCES referenced(int_col) MATCH SIMPLE ON UPDATE CASCADE ON DELETE SET DEFAULT;
|
|
ALTER TABLE referencing ADD COLUMN test_5 integer CONSTRAINT unique_c UNIQUE WITH (fillfactor=50) NULL;
|
|
ALTER TABLE referencing ADD COLUMN test_6 text COMPRESSION pglz COLLATE caseinsensitive NOT NULL;
|
|
ALTER TABLE referencing ADD COLUMN "test_\'!7" "simple_!\'custom_type";
|
|
|
|
-- we give up deparsing ALTER TABLE command if it needs to create a check constraint, and we fallback to legacy behavior
|
|
ALTER TABLE referencing ADD COLUMN test_8 integer CHECK (test_8 > 0);
|
|
ALTER TABLE referencing ADD COLUMN test_8 integer CONSTRAINT check_test_8 CHECK (test_8 > 0);
|
|
|
|
-- try to add test_6 again, but with IF NOT EXISTS
|
|
ALTER TABLE referencing ADD COLUMN IF NOT EXISTS test_6 text;
|
|
ALTER TABLE referencing ADD COLUMN IF NOT EXISTS test_6 integer;
|
|
|
|
SELECT (groupid = 0) AS is_coordinator, result FROM run_command_on_all_nodes(
|
|
$$SELECT get_grouped_fkey_constraints FROM get_grouped_fkey_constraints('alter_table_add_column.referencing')$$
|
|
)
|
|
JOIN pg_dist_node USING (nodeid)
|
|
ORDER BY is_coordinator DESC, result;
|
|
|
|
SELECT (groupid = 0) AS is_coordinator, result FROM run_command_on_all_nodes(
|
|
$$SELECT get_index_defs FROM get_index_defs('alter_table_add_column', 'referencing')$$
|
|
)
|
|
JOIN pg_dist_node USING (nodeid)
|
|
ORDER BY is_coordinator DESC, result;
|
|
|
|
SELECT (groupid = 0) AS is_coordinator, result FROM run_command_on_all_nodes(
|
|
$$SELECT get_column_defaults FROM get_column_defaults('alter_table_add_column', 'referencing')$$
|
|
)
|
|
JOIN pg_dist_node USING (nodeid)
|
|
ORDER BY is_coordinator DESC, result;
|
|
|
|
SELECT (groupid = 0) AS is_coordinator, result FROM run_command_on_all_nodes(
|
|
$$SELECT get_column_attrs FROM get_column_attrs('alter_table_add_column.referencing')$$
|
|
)
|
|
JOIN pg_dist_node USING (nodeid)
|
|
ORDER BY is_coordinator DESC, result;
|
|
|
|
SET client_min_messages TO WARNING;
|
|
DROP SCHEMA alter_table_add_column, alter_table_add_column_other_schema CASCADE;
|