mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Fix propagation of persistence to sequences in ALTER TABLE / ADD COLUMN
Fix for 344d62fb9a
: That commit introduced unlogged sequences and
made it so that identity/serial sequences automatically get the
persistence level of their owning table. But this works only for
CREATE TABLE and not for ALTER TABLE / ADD COLUMN. The latter would
always create the sequence as logged (default), independent of the
persistence setting of the table. This is fixed here.
Note: It is allowed to change the persistence of identity sequences
directly using ALTER SEQUENCE. So mistakes in existing databases can
be fixed manually.
Reviewed-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/c4b6e2ed-bcdf-4ea7-965f-e49761094827%40eisentraut.org
This commit is contained in:
@ -459,7 +459,16 @@ generateSerialExtraStmts(CreateStmtContext *cxt, ColumnDef *column,
|
||||
seqstmt = makeNode(CreateSeqStmt);
|
||||
seqstmt->for_identity = for_identity;
|
||||
seqstmt->sequence = makeRangeVar(snamespace, sname, -1);
|
||||
seqstmt->sequence->relpersistence = cxt->relation->relpersistence;
|
||||
|
||||
/*
|
||||
* Copy the persistence of the table. For CREATE TABLE, we get the
|
||||
* persistence from cxt->relation, which comes from the CreateStmt in
|
||||
* progress. For ALTER TABLE, the parser won't set
|
||||
* cxt->relation->relpersistence, but we have cxt->rel as the existing
|
||||
* table, so we copy the persistence from there.
|
||||
*/
|
||||
seqstmt->sequence->relpersistence = cxt->rel ? cxt->rel->rd_rel->relpersistence : cxt->relation->relpersistence;
|
||||
|
||||
seqstmt->options = seqoptions;
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user