sql >> Databáze >  >> RDS >> PostgreSQL

Duplicitní sloupec po přepnutí ze sériového na datový typ identity v PostgreSQL / pgAdmin4

Po dlouhém hledání jsem našel zde:

Ve skutečnosti existuje pouze jeden sloupec, který lze potvrdit pomocí psql. Nicméně pomocí příkazu pg_dump -st names <databasename> z bash jsem si všiml, že byly definovány 2 sekvence spojené se sloupcem id:public.names_id_seq a public.names_id_seq1 .

To lze také potvrdit spuštěním SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; z psql, kde se zobrazují obě sekvence.

Pokud se někdo pokusí odstranit public.names_id_seq1 jeden dostane chybu ERROR: cannot drop sequence apis_id_seq1 because column id of table apis requires it .

řešení je odstranit první sekvenci pomocí DROP SEQUENCE names_id_seq; Po obnovení pgAdmin4 byl druhý sloupec pryč.

TL;DR

  1. Spusťte SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; a identifikovat duplicitní sekvence (tj. ty, kde je verze s a jedna bez 1 na konci)

  2. Odstraňte nadbytečnou sekvenci pomocí DROP SEQUENCE <sequenceName_seq>; (smazat lze pouze ten, který nemá na konci 1)

  3. Obnovte pgAdmin4




  1. Jak implementovat Materialized View s MySQL?

  2. PL/SQL používá VARRAY v IN CLAUSE

  3. Je možné změnit přirozené pořadí sloupců v Postgresu?

  4. Spojení SQL proti rozsahům dat?