mirror of
https://github.com/postgres/postgres.git
synced 2025-05-21 15:54:08 +03:00
Don't disallow dropping NOT NULL for a list partition key.
Range partitioning doesn't support nulls in the partitioning columns, but list partitioning does. Amit Langote, per a complaint from Amul Sul
This commit is contained in:
parent
8d396a0a70
commit
e28b115612
@ -5593,18 +5593,22 @@ ATExecDropNotNull(Relation rel, const char *colName, LOCKMODE lockmode)
|
|||||||
if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
|
if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
|
||||||
{
|
{
|
||||||
PartitionKey key = RelationGetPartitionKey(rel);
|
PartitionKey key = RelationGetPartitionKey(rel);
|
||||||
int partnatts = get_partition_natts(key),
|
|
||||||
i;
|
|
||||||
|
|
||||||
for (i = 0; i < partnatts; i++)
|
if (get_partition_strategy(key) == PARTITION_STRATEGY_RANGE)
|
||||||
{
|
{
|
||||||
AttrNumber partattnum = get_partition_col_attnum(key, i);
|
int partnatts = get_partition_natts(key),
|
||||||
|
i;
|
||||||
|
|
||||||
if (partattnum == attnum)
|
for (i = 0; i < partnatts; i++)
|
||||||
ereport(ERROR,
|
{
|
||||||
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
AttrNumber partattnum = get_partition_col_attnum(key, i);
|
||||||
errmsg("column \"%s\" is in range partition key",
|
|
||||||
colName)));
|
if (partattnum == attnum)
|
||||||
|
ereport(ERROR,
|
||||||
|
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
||||||
|
errmsg("column \"%s\" is in range partition key",
|
||||||
|
colName)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3029,6 +3029,10 @@ ERROR: cannot alter type of column referenced in partition key expression
|
|||||||
-- cannot drop NOT NULL on columns in the range partition key
|
-- cannot drop NOT NULL on columns in the range partition key
|
||||||
ALTER TABLE partitioned ALTER COLUMN a DROP NOT NULL;
|
ALTER TABLE partitioned ALTER COLUMN a DROP NOT NULL;
|
||||||
ERROR: column "a" is in range partition key
|
ERROR: column "a" is in range partition key
|
||||||
|
-- it's fine however to drop one on the list partition key column
|
||||||
|
CREATE TABLE list_partitioned (a int not null) partition by list (a);
|
||||||
|
ALTER TABLE list_partitioned ALTER a DROP NOT NULL;
|
||||||
|
DROP TABLE list_partitioned;
|
||||||
-- partitioned table cannot participate in regular inheritance
|
-- partitioned table cannot participate in regular inheritance
|
||||||
CREATE TABLE foo (
|
CREATE TABLE foo (
|
||||||
a int,
|
a int,
|
||||||
|
@ -1917,6 +1917,11 @@ ALTER TABLE partitioned ALTER COLUMN b TYPE char(5);
|
|||||||
-- cannot drop NOT NULL on columns in the range partition key
|
-- cannot drop NOT NULL on columns in the range partition key
|
||||||
ALTER TABLE partitioned ALTER COLUMN a DROP NOT NULL;
|
ALTER TABLE partitioned ALTER COLUMN a DROP NOT NULL;
|
||||||
|
|
||||||
|
-- it's fine however to drop one on the list partition key column
|
||||||
|
CREATE TABLE list_partitioned (a int not null) partition by list (a);
|
||||||
|
ALTER TABLE list_partitioned ALTER a DROP NOT NULL;
|
||||||
|
DROP TABLE list_partitioned;
|
||||||
|
|
||||||
-- partitioned table cannot participate in regular inheritance
|
-- partitioned table cannot participate in regular inheritance
|
||||||
CREATE TABLE foo (
|
CREATE TABLE foo (
|
||||||
a int,
|
a int,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user