Search Postgresql Archives

Re: Primary key data type: integer vs identity

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 4/19/19 11:32 AM, Ken Tanzer wrote:
On Fri, Apr 19, 2019 at 11:20 AM Adrian Klaver <adrian.klaver@xxxxxxxxxxx <mailto:adrian.klaver@xxxxxxxxxxx>> wrote:

    On 4/19/19 11:14 AM, Rich Shepard wrote:
     > On Fri, 19 Apr 2019, Adrian Klaver wrote:
     >
     >> If it is working for you now I see no reason to switch.
     >
     > Adrian,
     >
     > It does work. I just learned about the SQL identity type and want
    to learn
     > when it's most appropriate to use. The databases I develop all
    work with
     > integers as primary keys and reading about the type didn't
    clarify (for me)
     > when it should be used.

    Mainly for folks that want cross database SQL compliance. It is not a
    type so much as a way of specifying an auto-increment column.


It also sounds like it has advantages in terms of tying your sequence directly to the column.  If you drop a serial column, it doesn't drop the sequence.

Misread your post the first time still:

create table serial_test(id serial, fld_1 text);

CREATE TABLE

test=> \d serial_test

Table "public.serial_test"

Column | Type | Collation | Nullable | Default

--------+---------+-----------+----------+-----------------------------------------

id | integer | | not null | nextval('serial_test_id_seq'::regclass) fld_1 | text | | |




test=> alter table serial_test drop column id;

ALTER TABLE

test=> \d serial_test

Table "public.serial_test"

Column | Type | Collation | Nullable | Default

--------+------+-----------+----------+---------

fld_1 | text | | |




test=> select * from serial_test_id_seq ;
ERROR:  relation "serial_test_id_seq" does not exist
LINE 1: select * from serial_test_id_seq ;

Once I've upgraded to 10+, I might look at converting my existing serial columns.  Peter Eisentraut wrote a good piece(1) on identity columns, including a function for converting existing serial columns.  I've copied the function below, but had two questions about it:

1)  Would the function as written also reassign ownership to that table column?  (I see the update to pg_depend and pg_attribute, but don't know enough about them to know if that changes ownership)
2)  Would one have to be a superuser to do this?

Thanks,
Ken

--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux