Spalten in PostgreSQL-Ansichten können nicht mit CREATE OR REPLACE umbenannt werden

37

In PostreSQL 8.3 versuche ich, eine Ansicht zu erstellen, die wie eine vorhandene Tabelle aussieht, aber unterschiedliche Spaltennamen hat.

Das funktioniert

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;

Das Obige macht ein Duplikat der family_tree-Tabelle, aber der folgende Versuch schlägt fehl:

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;
  • FEHLER: Name der Ansichtsspalte "family_tree_id" kann nicht geändert werden

Wie kann ich Spalten umbenennen?

Aleksandr Levchuk
quelle

Antworten:

44

Ich kann Ihren Fehler reproduzieren ... in meinem Fall habe ich zuerst eine Spalte als 'Datum' und dann als 'x' erstellt (habe versucht, festzustellen, ob es sich um ein Problem mit einem reservierten Wort handelt; es war nicht:

ERROR:  cannot change name of view column "date" to "x"

Wenn Sie zum drop viewersten Mal eine erstellen, können Sie die Ansicht mit einem geänderten Namen neu erstellen. Ich habe keine Ahnung, warum create or replaceich es nicht tun werde.


Erklärung von Colin 't Hart :

Die Dokumentation fürCREATE VIEW erklärt es ziemlich gut, ich denke:

Die neue Abfrage muss dieselben Spalten generieren, die von der vorhandenen Ansichtsabfrage generiert wurden (dh dieselben Spaltennamen in derselben Reihenfolge und mit denselben Datentypen), kann jedoch zusätzliche Spalten am Ende der Liste hinzufügen.

Joe
quelle
In der Tat müssen Sie die neue Spalte an das Ende der SELECT-Spaltenliste anfügen , sonst erhalten Sie den Fehler!
1
Ein wenig außerhalb des Themas liegender Kommentar: Beim Versuch, mithilfe von view Daten aus zwei Tabellen zu aggregieren, ist ein ähnliches Problem aufgetreten. In der Tat hatte ich verschiedene Typen ( VARCHARin der ersten und TEXTin der zweiten Tabelle) für die gleichnamigen Spalten. Ich habe viel Zeit für Nachforschungen aufgewendet, bis mir aufgefallen ist, dass IDE VARCHARfür beide Tabellen angezeigt wird ! pg_dumpHat mir nur rein geholfen.
Flaz14
30

Mit können Sie auch ALTER TABLE tbl RENAME COLUMN foo TO barAnsichtsspalten umbenennen.

Peter Eisentraut
quelle
Was ist tblhier Handelt es sich um eine tatsächliche Tabelle, für die eine Ansicht erstellt wurde, oder handelt es sich um den Ansichtsnamen?
Eugen Konkov