Vous n'êtes pas identifié(e).
Pages : 1
Hello tout le monde,
J’aurai une question au sujet du renommage du champs gid.
Je souhaiterai renommer gid en id.
Pour se faire j’ai tout d’abord procéder à ce renommage en allant dans les propriétés de la table et en modifiant la colonne gid. Déjà à cette étape je remarque une chose curieuse, c’est que le type de données du gid est de l’integer. Alors que dans le sql de la table il est bien spécifié que c’est du serial. Il s’avère qu’en modifiant le nom et seulement le nom gid pour id et en acceptant les modifications, j’ai mon type de donnée qui passe de serial à integer.
En soit malgré ce changement, le comportement de la colonne est normal et elle réagit toujours en conséquence de ce qui est renseigné dans sa séquence.
Ma première question est donc : Est-ce qu’il y a un risque à garder une telle configuration pour un champ aussi important qui constitue en plus ma clé primaire ?
Comme solution alternative, j’ai pensé à créer une nouvelle colonne id, avec serial en type de données. Dans la foulé est créé sa séquence par postgres. N’ayant plus d’utilité pour gid je le supprime et désigne ma colonne id comme nouvelle clé primaire de la table.
Mais j’ignore si ce genre de manips peut occasionner des dommages dans la table… Auriez-vous d’autres suggestions ou remarques ?
Je vous remercie.
Rémi
Hors ligne
Comme la doc le dit ici:
https://docs.postgresql.fr/12/datatype. … ype-serial
SERIAL n'est pas un vrai type de données, le type correspondant est integer (ou int4 ou int c'est pareil).
Ce qui est important à conserver c'est la clause DEFAULT. C'est elle qui fait le lien avec la séquence créée automatiquement quand on utilise SERIAL.
Au passage psql n'affiche pas serial mais int comme type de colonne:
test=> create table public.test(id serial);
CREATE TABLE
test=> \d public.test
Table « public.test »
Colonne | Type | Collationnement | NULL-able | Par défaut
---------+---------+-----------------+-----------+----------------------------------
id | integer | | not null | nextval('test_id_seq'::regclass)
L'outil que vous utilisez affiche SERIAL probablement en comparant le nom de la séquence avec le nom de la colonne, c'est pourquoi en changeant le nom de la colonne sans changer le nom de la séquence il arrête d'afficher SERIAL.
Dernière modification par dverite (29/01/2020 18:53:28)
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Bonjour dverite,
Merci pour les explications, c'est clair et net, j'ai pu vérifier de mon côté.
Bonne journée.
Hors ligne
Pages : 1