mirror of https://github.com/citusdata/citus.git
399 lines
20 KiB
Plaintext
399 lines
20 KiB
Plaintext
--
|
||
-- MULTI_NAME_LENGTHS
|
||
--
|
||
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 225000;
|
||
ALTER SEQUENCE pg_catalog.pg_dist_jobid_seq RESTART 225000;
|
||
SET citus.multi_shard_commit_protocol = '2pc';
|
||
-- Verify that a table name > 56 characters gets hashed properly.
|
||
CREATE TABLE too_long_12345678901234567890123456789012345678901234567890 (
|
||
col1 integer not null,
|
||
col2 integer not null);
|
||
SELECT master_create_distributed_table('too_long_12345678901234567890123456789012345678901234567890', 'col1', 'hash');
|
||
master_create_distributed_table
|
||
---------------------------------
|
||
|
||
(1 row)
|
||
|
||
SELECT master_create_worker_shards('too_long_12345678901234567890123456789012345678901234567890', '2', '2');
|
||
master_create_worker_shards
|
||
-----------------------------
|
||
|
||
(1 row)
|
||
|
||
\c - - - :worker_1_port
|
||
\d too_long_*
|
||
Table "public.too_long_12345678901234567890123456789012345678_e0119164_225000"
|
||
Column | Type | Modifiers
|
||
--------+---------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
|
||
Table "public.too_long_12345678901234567890123456789012345678_e0119164_225001"
|
||
Column | Type | Modifiers
|
||
--------+---------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
|
||
\c - - - :master_port
|
||
-- Verify that the UDF works and rejects bad arguments.
|
||
SELECT shard_name(NULL, 666666);
|
||
ERROR: object_name cannot be null
|
||
SELECT shard_name(0, 666666);
|
||
ERROR: object_name does not reference a valid relation
|
||
SELECT shard_name('too_long_12345678901234567890123456789012345678901234567890'::regclass, 666666);
|
||
shard_name
|
||
-----------------------------------------------------------------
|
||
too_long_12345678901234567890123456789012345678_e0119164_666666
|
||
(1 row)
|
||
|
||
SELECT shard_name('too_long_12345678901234567890123456789012345678901234567890'::regclass, NULL);
|
||
ERROR: shard_id cannot be null
|
||
SELECT shard_name('too_long_12345678901234567890123456789012345678901234567890'::regclass, -21);
|
||
ERROR: shard_id cannot be zero or negative value
|
||
DROP TABLE too_long_12345678901234567890123456789012345678901234567890 CASCADE;
|
||
-- Table to use for rename checks.
|
||
CREATE TABLE name_lengths (
|
||
col1 integer not null,
|
||
col2 integer not null,
|
||
constraint constraint_a UNIQUE (col1)
|
||
);
|
||
SELECT master_create_distributed_table('name_lengths', 'col1', 'hash');
|
||
master_create_distributed_table
|
||
---------------------------------
|
||
|
||
(1 row)
|
||
|
||
SELECT master_create_worker_shards('name_lengths', '2', '2');
|
||
master_create_worker_shards
|
||
-----------------------------
|
||
|
||
(1 row)
|
||
|
||
-- Verify that we CAN add columns with "too-long names", because
|
||
-- the columns' names are not extended in the corresponding shard tables.
|
||
ALTER TABLE name_lengths ADD COLUMN float_col_12345678901234567890123456789012345678901234567890 FLOAT;
|
||
NOTICE: using one-phase commit for distributed DDL commands
|
||
HINT: You can enable two-phase commit for extra safety with: SET citus.multi_shard_commit_protocol TO '2pc'
|
||
ALTER TABLE name_lengths ADD COLUMN date_col_12345678901234567890123456789012345678901234567890 DATE;
|
||
ALTER TABLE name_lengths ADD COLUMN int_col_12345678901234567890123456789012345678901234567890 INTEGER DEFAULT 1;
|
||
-- Placeholders for unsupported ALTER TABLE to add constraints with implicit names that are likely too long
|
||
ALTER TABLE name_lengths ADD UNIQUE (float_col_12345678901234567890123456789012345678901234567890);
|
||
ERROR: cannot create constraint
|
||
DETAIL: Citus cannot execute ADD CONSTRAINT command other than ADD CONSTRAINT FOREIGN KEY.
|
||
ALTER TABLE name_lengths ADD EXCLUDE (int_col_12345678901234567890123456789012345678901234567890 WITH =);
|
||
ERROR: cannot create constraint
|
||
DETAIL: Citus cannot execute ADD CONSTRAINT command other than ADD CONSTRAINT FOREIGN KEY.
|
||
ALTER TABLE name_lengths ADD CHECK (date_col_12345678901234567890123456789012345678901234567890 > '2014-01-01'::date);
|
||
ERROR: cannot create constraint
|
||
DETAIL: Citus cannot execute ADD CONSTRAINT command other than ADD CONSTRAINT FOREIGN KEY.
|
||
\c - - - :worker_1_port
|
||
\d name_lengths_*
|
||
Table "public.name_lengths_225002"
|
||
Column | Type | Modifiers
|
||
--------------------------------------------------------------+------------------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
float_col_12345678901234567890123456789012345678901234567890 | double precision |
|
||
date_col_12345678901234567890123456789012345678901234567890 | date |
|
||
int_col_12345678901234567890123456789012345678901234567890 | integer | default 1
|
||
Indexes:
|
||
"constraint_a_225002" UNIQUE CONSTRAINT, btree (col1)
|
||
|
||
Table "public.name_lengths_225003"
|
||
Column | Type | Modifiers
|
||
--------------------------------------------------------------+------------------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
float_col_12345678901234567890123456789012345678901234567890 | double precision |
|
||
date_col_12345678901234567890123456789012345678901234567890 | date |
|
||
int_col_12345678901234567890123456789012345678901234567890 | integer | default 1
|
||
Indexes:
|
||
"constraint_a_225003" UNIQUE CONSTRAINT, btree (col1)
|
||
|
||
\c - - - :master_port
|
||
-- Placeholders for unsupported add constraints with EXPLICIT names that are too long
|
||
ALTER TABLE name_lengths ADD CONSTRAINT nl_unique_12345678901234567890123456789012345678901234567890 UNIQUE (float_col_12345678901234567890123456789012345678901234567890);
|
||
ERROR: cannot create constraint
|
||
DETAIL: Citus cannot execute ADD CONSTRAINT command other than ADD CONSTRAINT FOREIGN KEY.
|
||
ALTER TABLE name_lengths ADD CONSTRAINT nl_exclude_12345678901234567890123456789012345678901234567890 EXCLUDE (int_col_12345678901234567890123456789012345678901234567890 WITH =);
|
||
ERROR: cannot create constraint
|
||
DETAIL: Citus cannot execute ADD CONSTRAINT command other than ADD CONSTRAINT FOREIGN KEY.
|
||
ALTER TABLE name_lengths ADD CONSTRAINT nl_checky_12345678901234567890123456789012345678901234567890 CHECK (date_col_12345678901234567890123456789012345678901234567890 >= '2014-01-01'::date);
|
||
ERROR: cannot create constraint
|
||
DETAIL: Citus cannot execute ADD CONSTRAINT command other than ADD CONSTRAINT FOREIGN KEY.
|
||
\c - - - :worker_1_port
|
||
\d nl_*
|
||
\c - - - :master_port
|
||
-- Placeholders for RENAME operations
|
||
ALTER TABLE name_lengths RENAME TO name_len_12345678901234567890123456789012345678901234567890;
|
||
ERROR: renaming distributed tables or their objects is currently unsupported
|
||
ALTER TABLE name_lengths RENAME CONSTRAINT unique_12345678901234567890123456789012345678901234567890 TO unique2_12345678901234567890123456789012345678901234567890;
|
||
ERROR: renaming distributed tables or their objects is currently unsupported
|
||
-- Verify that CREATE INDEX on already distributed table has proper shard names.
|
||
CREATE INDEX tmp_idx_12345678901234567890123456789012345678901234567890 ON name_lengths(col2);
|
||
NOTICE: using one-phase commit for distributed DDL commands
|
||
HINT: You can enable two-phase commit for extra safety with: SET citus.multi_shard_commit_protocol TO '2pc'
|
||
\c - - - :worker_1_port
|
||
\d tmp_idx_*
|
||
Index "public.tmp_idx_123456789012345678901234567890123456789_5e470afa_225002"
|
||
Column | Type | Definition
|
||
--------+---------+------------
|
||
col2 | integer | col2
|
||
btree, for table "public.name_lengths_225002"
|
||
|
||
Index "public.tmp_idx_123456789012345678901234567890123456789_5e470afa_225003"
|
||
Column | Type | Definition
|
||
--------+---------+------------
|
||
col2 | integer | col2
|
||
btree, for table "public.name_lengths_225003"
|
||
|
||
\c - - - :master_port
|
||
-- Verify that a new index name > 63 characters is auto-truncated
|
||
-- by the parser/rewriter before further processing, just as in Postgres.
|
||
CREATE INDEX tmp_idx_123456789012345678901234567890123456789012345678901234567890 ON name_lengths(col2);
|
||
NOTICE: identifier "tmp_idx_123456789012345678901234567890123456789012345678901234567890" will be truncated to "tmp_idx_1234567890123456789012345678901234567890123456789012345"
|
||
NOTICE: using one-phase commit for distributed DDL commands
|
||
HINT: You can enable two-phase commit for extra safety with: SET citus.multi_shard_commit_protocol TO '2pc'
|
||
\c - - - :worker_1_port
|
||
\d tmp_idx_*
|
||
Index "public.tmp_idx_123456789012345678901234567890123456789_599636aa_225002"
|
||
Column | Type | Definition
|
||
--------+---------+------------
|
||
col2 | integer | col2
|
||
btree, for table "public.name_lengths_225002"
|
||
|
||
Index "public.tmp_idx_123456789012345678901234567890123456789_599636aa_225003"
|
||
Column | Type | Definition
|
||
--------+---------+------------
|
||
col2 | integer | col2
|
||
btree, for table "public.name_lengths_225003"
|
||
|
||
Index "public.tmp_idx_123456789012345678901234567890123456789_5e470afa_225002"
|
||
Column | Type | Definition
|
||
--------+---------+------------
|
||
col2 | integer | col2
|
||
btree, for table "public.name_lengths_225002"
|
||
|
||
Index "public.tmp_idx_123456789012345678901234567890123456789_5e470afa_225003"
|
||
Column | Type | Definition
|
||
--------+---------+------------
|
||
col2 | integer | col2
|
||
btree, for table "public.name_lengths_225003"
|
||
|
||
\c - - - :master_port
|
||
-- Verify that distributed tables with too-long names
|
||
-- for CHECK constraints are no trouble.
|
||
CREATE TABLE sneaky_name_lengths (
|
||
col1 integer not null,
|
||
col2 integer not null,
|
||
int_col_12345678901234567890123456789012345678901234567890 integer not null,
|
||
CHECK (int_col_12345678901234567890123456789012345678901234567890 > 100)
|
||
);
|
||
SELECT master_create_distributed_table('sneaky_name_lengths', 'col1', 'hash');
|
||
master_create_distributed_table
|
||
---------------------------------
|
||
|
||
(1 row)
|
||
|
||
SELECT master_create_worker_shards('sneaky_name_lengths', '2', '2');
|
||
master_create_worker_shards
|
||
-----------------------------
|
||
|
||
(1 row)
|
||
|
||
DROP TABLE sneaky_name_lengths CASCADE;
|
||
CREATE TABLE sneaky_name_lengths (
|
||
int_col_123456789012345678901234567890123456789012345678901234 integer UNIQUE not null,
|
||
col2 integer not null,
|
||
CONSTRAINT checky_12345678901234567890123456789012345678901234567890 CHECK (int_col_123456789012345678901234567890123456789012345678901234 > 100)
|
||
);
|
||
\d sneaky_name_lengths*
|
||
Table "public.sneaky_name_lengths"
|
||
Column | Type | Modifiers
|
||
----------------------------------------------------------------+---------+-----------
|
||
int_col_123456789012345678901234567890123456789012345678901234 | integer | not null
|
||
col2 | integer | not null
|
||
Indexes:
|
||
"sneaky_name_lengths_int_col_1234567890123456789012345678901_key" UNIQUE CONSTRAINT, btree (int_col_123456789012345678901234567890123456789012345678901234)
|
||
Check constraints:
|
||
"checky_12345678901234567890123456789012345678901234567890" CHECK (int_col_123456789012345678901234567890123456789012345678901234 > 100)
|
||
|
||
Index "public.sneaky_name_lengths_int_col_1234567890123456789012345678901_key"
|
||
Column | Type | Definition
|
||
----------------------------------------------------------------+---------+----------------------------------------------------------------
|
||
int_col_123456789012345678901234567890123456789012345678901234 | integer | int_col_123456789012345678901234567890123456789012345678901234
|
||
unique, btree, for table "public.sneaky_name_lengths"
|
||
|
||
SELECT master_create_distributed_table('sneaky_name_lengths', 'int_col_123456789012345678901234567890123456789012345678901234', 'hash');
|
||
master_create_distributed_table
|
||
---------------------------------
|
||
|
||
(1 row)
|
||
|
||
SELECT master_create_worker_shards('sneaky_name_lengths', '2', '2');
|
||
master_create_worker_shards
|
||
-----------------------------
|
||
|
||
(1 row)
|
||
|
||
\c - - - :worker_1_port
|
||
\d sneaky_name_lengths*
|
||
Table "public.sneaky_name_lengths_225006"
|
||
Column | Type | Modifiers
|
||
----------------------------------------------------------------+---------+-----------
|
||
int_col_123456789012345678901234567890123456789012345678901234 | integer | not null
|
||
col2 | integer | not null
|
||
Indexes:
|
||
"sneaky_name_lengths_int_col_1234567890123456789_6402d2cd_225006" UNIQUE CONSTRAINT, btree (int_col_123456789012345678901234567890123456789012345678901234)
|
||
Check constraints:
|
||
"checky_12345678901234567890123456789012345678901234567890" CHECK (int_col_123456789012345678901234567890123456789012345678901234 > 100)
|
||
|
||
Table "public.sneaky_name_lengths_225007"
|
||
Column | Type | Modifiers
|
||
----------------------------------------------------------------+---------+-----------
|
||
int_col_123456789012345678901234567890123456789012345678901234 | integer | not null
|
||
col2 | integer | not null
|
||
Indexes:
|
||
"sneaky_name_lengths_int_col_1234567890123456789_6402d2cd_225007" UNIQUE CONSTRAINT, btree (int_col_123456789012345678901234567890123456789012345678901234)
|
||
Check constraints:
|
||
"checky_12345678901234567890123456789012345678901234567890" CHECK (int_col_123456789012345678901234567890123456789012345678901234 > 100)
|
||
|
||
Index "public.sneaky_name_lengths_int_col_1234567890123456789_6402d2cd_225006"
|
||
Column | Type | Definition
|
||
----------------------------------------------------------------+---------+----------------------------------------------------------------
|
||
int_col_123456789012345678901234567890123456789012345678901234 | integer | int_col_123456789012345678901234567890123456789012345678901234
|
||
unique, btree, for table "public.sneaky_name_lengths_225006"
|
||
|
||
Index "public.sneaky_name_lengths_int_col_1234567890123456789_6402d2cd_225007"
|
||
Column | Type | Definition
|
||
----------------------------------------------------------------+---------+----------------------------------------------------------------
|
||
int_col_123456789012345678901234567890123456789012345678901234 | integer | int_col_123456789012345678901234567890123456789012345678901234
|
||
unique, btree, for table "public.sneaky_name_lengths_225007"
|
||
|
||
\c - - - :master_port
|
||
DROP TABLE sneaky_name_lengths CASCADE;
|
||
-- verify that named constraint with too-long name gets hashed properly
|
||
CREATE TABLE sneaky_name_lengths (
|
||
col1 integer not null,
|
||
col2 integer not null,
|
||
int_col_12345678901234567890123456789012345678901234567890 integer not null,
|
||
constraint unique_12345678901234567890123456789012345678901234567890 UNIQUE (col1)
|
||
);
|
||
SELECT master_create_distributed_table('sneaky_name_lengths', 'col1', 'hash');
|
||
master_create_distributed_table
|
||
---------------------------------
|
||
|
||
(1 row)
|
||
|
||
SELECT master_create_worker_shards('sneaky_name_lengths', '2', '2');
|
||
master_create_worker_shards
|
||
-----------------------------
|
||
|
||
(1 row)
|
||
|
||
\c - - - :worker_1_port
|
||
\d sneaky_name_lengths*
|
||
Table "public.sneaky_name_lengths_225008"
|
||
Column | Type | Modifiers
|
||
------------------------------------------------------------+---------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
int_col_12345678901234567890123456789012345678901234567890 | integer | not null
|
||
Indexes:
|
||
"unique_1234567890123456789012345678901234567890_a5986f27_225008" UNIQUE CONSTRAINT, btree (col1)
|
||
|
||
Table "public.sneaky_name_lengths_225009"
|
||
Column | Type | Modifiers
|
||
------------------------------------------------------------+---------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
int_col_12345678901234567890123456789012345678901234567890 | integer | not null
|
||
Indexes:
|
||
"unique_1234567890123456789012345678901234567890_a5986f27_225009" UNIQUE CONSTRAINT, btree (col1)
|
||
|
||
\c - - - :master_port
|
||
DROP TABLE sneaky_name_lengths CASCADE;
|
||
-- Verify that much larger shardIds are handled properly
|
||
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 2250000000000;
|
||
CREATE TABLE too_long_12345678901234567890123456789012345678901234567890 (
|
||
col1 integer not null,
|
||
col2 integer not null);
|
||
SELECT master_create_distributed_table('too_long_12345678901234567890123456789012345678901234567890', 'col1', 'hash');
|
||
master_create_distributed_table
|
||
---------------------------------
|
||
|
||
(1 row)
|
||
|
||
SELECT master_create_worker_shards('too_long_12345678901234567890123456789012345678901234567890', '2', '2');
|
||
master_create_worker_shards
|
||
-----------------------------
|
||
|
||
(1 row)
|
||
|
||
\c - - - :worker_1_port
|
||
\d too_long_*
|
||
Table "public.too_long_1234567890123456789012345678901_e0119164_2250000000000"
|
||
Column | Type | Modifiers
|
||
--------+---------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
|
||
Table "public.too_long_1234567890123456789012345678901_e0119164_2250000000001"
|
||
Column | Type | Modifiers
|
||
--------+---------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
|
||
\c - - - :master_port
|
||
DROP TABLE too_long_12345678901234567890123456789012345678901234567890 CASCADE;
|
||
-- Verify that multi-byte boundaries are respected for databases with UTF8 encoding.
|
||
CREATE TABLE U&"elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D" UESCAPE '!' (
|
||
col1 integer not null PRIMARY KEY,
|
||
col2 integer not null);
|
||
SELECT master_create_distributed_table(U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!', 'col1', 'hash');
|
||
master_create_distributed_table
|
||
---------------------------------
|
||
|
||
(1 row)
|
||
|
||
SELECT master_create_worker_shards(U&'elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D' UESCAPE '!', '2', '2');
|
||
master_create_worker_shards
|
||
-----------------------------
|
||
|
||
(1 row)
|
||
|
||
\c - - - :worker_1_port
|
||
\d elephant_*
|
||
Index "public.elephant_слонслонслонсло_14d34928_2250000000002"
|
||
Column | Type | Definition
|
||
--------+---------+------------
|
||
col1 | integer | col1
|
||
primary key, btree, for table "public.elephant_слонслонслонсло_c8b737c2_2250000000002"
|
||
|
||
Index "public.elephant_слонслонслонсло_14d34928_2250000000003"
|
||
Column | Type | Definition
|
||
--------+---------+------------
|
||
col1 | integer | col1
|
||
primary key, btree, for table "public.elephant_слонслонслонсло_c8b737c2_2250000000003"
|
||
|
||
Table "public.elephant_слонслонслонсло_c8b737c2_2250000000002"
|
||
Column | Type | Modifiers
|
||
--------+---------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
Indexes:
|
||
"elephant_слонслонслонсло_14d34928_2250000000002" PRIMARY KEY, btree (col1)
|
||
|
||
Table "public.elephant_слонслонслонсло_c8b737c2_2250000000003"
|
||
Column | Type | Modifiers
|
||
--------+---------+-----------
|
||
col1 | integer | not null
|
||
col2 | integer | not null
|
||
Indexes:
|
||
"elephant_слонслонслонсло_14d34928_2250000000003" PRIMARY KEY, btree (col1)
|
||
|
||
\c - - - :master_port
|
||
-- Clean up.
|
||
DROP TABLE name_lengths CASCADE;
|
||
DROP TABLE U&"elephant_!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D!0441!043B!043E!043D" UESCAPE '!' CASCADE;
|