Identity columns should own only one sequence
Laurenz Albe <laurenz.albe@cybertec.at>
From: Laurenz Albe <laurenz.albe@cybertec.at>
To: pgsql-hackers@lists.postgresql.org
Date: 2019-04-14T15:51:47Z
Lists: pgsql-hackers
Attachments
- 0001-Make-sure-identity-columns-own-only-a-single-sequenc.patch (text/x-patch) patch 0001
Identity columns don't work if they own more than one sequence. So if one tries to convert a "serial" column to an identity column, the following can happen: test=> CREATE TABLE ser(id serial); CREATE TABLE test=> ALTER TABLE ser ALTER id ADD GENERATED ALWAYS AS IDENTITY; ERROR: column "id" of relation "ser" already has a default value Hm, ok, let's drop the column default value. test=> ALTER TABLE ser ALTER id DROP DEFAULT; ALTER TABLE Now it works: test=> ALTER TABLE ser ALTER id ADD GENERATED ALWAYS AS IDENTITY; ALTER TABLE But not very much: test=> INSERT INTO ser (id) VALUES (DEFAULT); ERROR: more than one owned sequence found I propose that we check if there already is a dependent sequence before adding an identity column. The attached patch does that, and also forbids setting the ownership of a sequence to an identity column. I think this should be backpatched. Yours, Laurenz Albe
Commits
-
Make identity sequence management more robust
- 19781729f789 13.0 landed