Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Auto increment einer bestehenden Spalte hinzufügen

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Ludwigmller, 12 April 2021.

  1. Ludwigmller

    Ludwigmller Fleissiger Benutzer

    Ich möchte gerne einer bestehenden Spalte "id", die bereits primary key ist, auto increment hinzufügen, sodass automatisch die id fortgezählt wird.

    Ich habe es mit dem Datentyp Serial veruscht. Die Abfrage
    Code:
    alter table t alter column id type serial;
    liefert den Fehler " Typ »serial« existiert nicht".

    Wie kann ich das realisieren?


    Gruß Ludwig
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Code:
    edb=> create table demo(id int primary key, data text);
    CREATE TABLE
    edb=*> create sequence my_seq owned by demo.id;
    CREATE SEQUENCE
    edb=*> alter table demo alter column id set default nextval('my_seq');
    ALTER TABLE
    edb=*> insert into demo (data) values ('test');
    INSERT 0 1
    edb=*> select * from demo;
     id | data
    ----+------
      1 | test
    (1 row)
    
    edb=*>
    edb=*> \d demo
                              Table "public.demo"
     Column |  Type   | Collation | Nullable |           Default           
    --------+---------+-----------+----------+-----------------------------
     id     | integer |           | not null | nextval('my_seq'::regclass)
     data   | text    |           |          |
    Indexes:
        "demo_pkey" PRIMARY KEY, btree (id)
    
    
     
    Ludwigmller gefällt das.
  3. Ludwigmller

    Ludwigmller Fleissiger Benutzer

    Danke, klappt!
     
  4. castorp

    castorp Datenbank-Guru

    Mit aktuellen Postgres Versionen (>= 10) wird empfohlen, identity Spalten zu verwenden. Von der Verwendung von serial wird abgeraten.

    Code:
    alter table the_table
      alter id add generated always as identity;
    
    Danach musst Du die Sequence noch an die Werte in der Tabelle anpassen, damit der nächste INSERT nicht einen Wert generiert den es schon gibt:

    Code:
    select setval(pg_get_serial_sequence('the_table', 'id'), max(id))
    from the_table;
    
     
    Walter, Ludwigmller und akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden