Re: Converting to identity columns with domains on PK columns

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: PegoraroF10 <marcos(at)f10(dot)com(dot)br>, pgsql-general(at)postgresql(dot)org
Subject: Re: Converting to identity columns with domains on PK columns
Date: 2019-07-04 20:56:53
Message-ID: 3756ada7-7ae4-1d3c-7ba0-b0c887f6dfc1@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 7/4/19 1:27 PM, Adrian Klaver wrote:
> On 7/4/19 1:03 PM, PegoraroF10 wrote:
>> ok, thanks for the explanation but ... I cannot add a field and move
>> data,
>> constraints, triggers, identity to it because my pk field will be
>> repositioned to the last field on that table and I have lots of other
>> codes
>> which point to pk as the first field on every table.
>
> I stay away from using the index position of field for this reason.
>
>>
>> So, there is a way to convert that field to a identity field ?
>
> See my second option in previous post.
>
> Or, old school identity column:):
>
> create sequence id_seq owned by mytable.id;
>
> alter table mytable alter column id set default nextval('id_seq');
>
> \d mytable
>                          Table "public.mytable"
>    Column    | Type | Collation | Nullable |           Default
> -------------+------+-----------+----------+-----------------------------
>  id          | i32  |           | not null | nextval('id_seq'::regclass)
>  description | t50  |           |          |
> Indexes:
>     "mytable_pkey" PRIMARY KEY, btree (id)
>
>

I know this worked, but then I got to wondering why?

Found the answer in sequence.c(init_params) in the if (as_type != NULL)
section. When creating a sequence you can specify AS data_type as long
as the type is one of smallint, integer or bigint. If data_type is not
specified then the default is bigint. If I am following correctly in
tablecommands.c when you create an IDENTITY column it uses the type it
gets from the column for the AS data_type. In your case that would be a
domain type which is != to the base types above.

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Gianni Ceccarelli 2019-07-04 21:03:50 Re: Why does jsonb_set() remove non-mentioned keys?
Previous Message Thomas Kellerer 2019-07-04 20:33:12 Re: Why does jsonb_set() remove non-mentioned keys?