Modifier la clé primaire dans la table PostgreSQL

J'ai users table dans mon PostgreSQL 9.3.6 base de données avec deux colonnes: id et another_id. Le id est une clé primaire, la another_id est juste une autre colonne de type entier avec contrainte unique.

Il y a d'autres tables de référence des utilisateurs par clé primaire.

Voici la users description de la table:

Table "public.users"
        Column        |              Type              |               Modifiers                | Storage | Stats target | Description 
----------------------+--------------------------------+----------------------------------------+---------+--------------+-------------
 id                   | integer                        | not null                               | plain   |              | 
 another_id           | integer                        | not null                               | plain   |              | 

Indexes:
    "users_pkey" PRIMARY KEY, btree (id)
    "uniq_1483a5e93414710b" UNIQUE, btree (another_id)

Referenced by:
    TABLE "foo_table" CONSTRAINT "fk_4affc6e5a76ed395" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    TABLE "bar_table" CONSTRAINT "fk_72936b1da76ed395" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    TABLE "baz_table" CONSTRAINT "fk_83adbaf0a76ed395" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE

Voici foo_table description:

Table "public.foo_table"
    Column    |              Type              |                   Modifiers                   | Storage  | Stats target | Description 
--------------+--------------------------------+-----------------------------------------------+----------+--------------+-------------
 id           | integer                        | not null                                      | plain    |              | 
 user_id      | integer                        |                                               | plain    |              | 

Indexes:
    "foo_table_pkey" PRIMARY KEY, btree (id)
    "idx_e52ffdeea76ed395" btree (user_id)
Foreign-key constraints:
    "fk_e52ffdeea76ed395" FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE

Comment puis-je remplacer la clé primaire dans la table PostgreSQL à partir de id colonne de another_id colonne et de maintenir l'intégrité des données?

  • Vous pouvez créer la clé primaire en utilisant les index unique (uniq_1483a5e93414710b), cela va vous changer pour un nouveau PENALTY.
  • btw, il faudra reconstruire de toutes référence à FK. et ce concirns l'intégrité - PG vous permet d'exécuter DDL dans la transaction. afin de fonctionner whoel ensemble de DDL entre début; FIN;
  • Voulez-vous supprimer complètement id de la colonne et de la remplacer par another_id, ou vous souhaitez à la fois d'être là? Si les deux, le PKs doit être "redirigé" vers another_id ou pas?