web-dev-qa-db-fra.com

Modifier le type de données d'une colonne en série

Dans pgsql, existe-t-il un moyen d’avoir une table de plusieurs valeurs et de choisir l’une d’elles (par exemple, other_id), de trouver sa valeur la plus élevée et d’incrémenter chaque nouvelle entrée placée dans la table à partir de cette valeur.

Je suppose que c'était trop facile d'avoir une chance de travailler ..

ALTER TABLE address ALTER COLUMN new_id TYPE SERIAL

____________________________________ 
ERROR:  type "serial" does not exist

Merci beaucoup pour toute idée!

24
1252748

Regardez dans la documentation postgresql de type de données serial . La série est seulement la main courte.

CREATE TABLE tablename (
    colname SERIAL
);

équivaut à spécifier:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
29
Lucas

Cela est dû au fait que vous pouvez utiliser le type de données série uniquement lorsque vous créez une nouvelle table ou ajoutez une nouvelle colonne à une table. Si vous essayez de modifier une table existante en utilisant ce type de données, vous obtiendrez une erreur. Parce que série n'est pas un type de données réel, mais simplement une abréviation ou un alias pour une requête un peu plus longue.

Au cas où vous souhaiteriez obtenir le même effet, comme vous vous attendez à utiliser le type de données série lorsque vous modifiez une table existante, procédez comme suit:

CREATE SEQUENCE my_serial AS integer START 1 OWNED BY address.new_id;

ALTER TABLE address ALTER COLUMN new_id SET DEFAULT nextval('my_serial');
  1. La première ligne de la requête crée votre propre séquence avec le nom my_serial .OWEND BY instruction connecte la séquence nouvellement créée à la colonne exacte de votre table. Dans votre table de cas exacte est adresse et la colonne est new_id. START statement définit la valeur à partir de laquelle cette séquence doit commencer.

  2. La deuxième ligne modifie votre tableau avec une nouvelle valeur par défaut, qui sera déterminée par la séquence créée précédemment.

Cela vous amènera au même résultat que vous attendiez de l'utilisation de série.

0
Sergey Novopoltsev