On Thu, Mar 31, 2022 at 6:03 PM Robert Haas <robertmh...@gmail.com> wrote:
> On Thu, Mar 31, 2022 at 8:44 PM David G. Johnston > <david.g.johns...@gmail.com> wrote: > > > The "give the user power" argument is also valid. But since they > already have power through unowned sequences, having the owned sequences > more narrowly defined doesn't detract from usability, and in many ways > enhances it by further reinforcing the fact that the sequence internally > used when you say "GENERATED ALWAYS AS IDENTITY" is an implementation > detail - one that has the same persistence as the table. > > I think there's a question about what happens in the GENERATED ALWAYS > AS IDENTITY case. The DDL commands that create such sequences are of > the form ALTER TABLE something ALTER COLUMN somethingelse GENERATED > ALWAYS AS (sequence_parameters), and if we need to specify somewhere > in the whether the sequence should be logged or unlogged, how do we do > that? I give answers for the "owned sequences match their owning table's persistence" model below: You would not need to specify it - the table is specified and that is sufficient to know what value to choose. > Consider: > > rhaas=# create unlogged table xyz (a int generated always as identity); > CREATE TABLE > rhaas=# \d+ xyz > Unlogged table " > public.xyz" > Column | Type | Collation | Nullable | Default > | Storage | Compression | Stats target | Description > > --------+---------+-----------+----------+------------------------------+---------+-------------+--------------+------------- > a | integer | | not null | generated always as > identity | plain | | | > Access method: heap > > rhaas=# \d+ xyz_a_seq > Sequence "public.xyz_a_seq" > Type | Start | Minimum | Maximum | Increment | Cycles? | Cache > ---------+-------+---------+------------+-----------+---------+------- > integer | 1 | 1 | 2147483647 | 1 | no | 1 > Sequence for identity column: public.xyz.a > > In this new system, does the user still get a logged sequence? No > If they > get an unlogged sequence, how does dump-and-restore work? As described in the first response, since ALTER COLUMN is used during dump-and-restore, the sequence creation occurs in a command where we know the owning table is unlogged so the created sequence is unlogged. > What if they > want to still have a logged sequence? I was expecting the following to work, though it does not presently: ALTER SEQUENCE yetanotherthing OWNED BY NONE; ERROR: cannot change ownership of identity sequence ALTER SEQUENCE yetanotherthing SET LOGGED; IMO, the generated case is the stronger one for not allowing them to be different. They can fall back onto the DEFAULT nextval('sequence_that_is_unowned') option to get the desired behavior. David J.