2017-05-09 4 views
0

Ich habe eine Spalte enum type in meiner Tabelle. Ich habe mich jetzt entschieden, es zu einem Varchar-Typ zu machen und einige Einschränkungen zu setzen.Upgrade von enum type Spalte zu varchar in postgresql

Q1) Was ist eine gute Praxis: enums zu haben oder constarint auf die Säule zu setzen.

Q2) Wie ändere ich meine Enum-Typ-Spalte in Varchar. Genau gegenüber dieser Frage question. Ich habe versucht, mit diesen:

ALTER TABLE tablename ALTER COLUMN columnname TYPE VARCHAR 

Aber das gibt mir den Fehler: No operator matches the given name and argument type(s). You might need to add explicit type casts.

Dies ist die Tabellendefinition:

CREATE TABLE tablename (
    id1 TEXT NOT NULL, 
    id2 VARCHAR(100) NOT NULL, 
    enum_field table_enum, 
    modified_on TIMESTAMP NOT NULL DEFAULT NOW(), 
    modified_by VARCHAR(100), 
    PRIMARY key (id1, id2) 
); 
+0

Es funktioniert für mich. Können Sie die Frage mit den Anweisungen "CREATE TYPE" und "CREATE TABLE" erweitern, damit ich das Problem reproduzieren kann? –

+0

Was passiert, wenn Sie Folgendes versuchen: 'ALTER TABLE Tabellenname ALTER COLUMN Spaltenname TYPE VARCHAR USING Spaltenname :: Text'? Die Nachricht weist darauf hin, dass es Ihre enum, die technisch ein Typ ist, nicht in 'varchar' konvertieren kann, vermutlich weil enum kein einfacher Typ ist. Möglicherweise haben Sie einen Erfolgstyp beim Umwandeln in Text. Von https://www.postgresql.org/docs/current/static/sql-altertable.html: "Eine USING-Klausel muss angegeben werden, wenn es keine implizite oder Zuweisungsumwandlung vom alten zum neuen Typ gibt". – Manngo

+0

@manngo-Operator existiert nicht: variierendes Zeichen = table_enum: Dies ist der Fehler, den ich erhalte, wenn ich den vorgeschlagenen Befehl ausführe. table_enum ist das enum Feld meiner Tabelle. –

Antwort

2

Wie für die beste Praxis ist es am besten, wenn Sie ein definieren Trennen Sie die Tabelle der möglichen Werte und machen Sie Ihre Spalte zu einem Fremdschlüssel für diese Tabelle. Dies hat folgende Vorteile:

  • Die neue Tabelle kann nicht nur den spezifischen Schlüssel als eine Art hat, kann es zusätzliche Spalten mit Details, wie ein freundlichen Namen, Bedeutung des Typs oder weiterer Informationen
  • Ändern Die möglichen Werte sind eine Angelegenheit der Manipulation von Datensätzen (INSERT, UPDATE oder DELETE), die zugänglicher und leichter zu verwalten ist als das Ändern von Beschränkungen oder Aufzählungswerten.
Verwandte Themen