2017-03-22 11 views
0

Ich habe eine Datenbank und ich habe eine Sicht mit den Daten, die ich möchte. Die Daten sieht etwa so aus:Hinzufügen einer neuen Spalte zu einer Sicht in SQL

n  | value | 
----------+---------+ 
50404791 |  112 | 
    5034591 |  164 | 
50280287 |  31 | 

Ich möchte eine Textspalte wie folgt hinzuzufügen:

n  | value | status | 
----------+---------+--------+ 
50404791 |  112 |default | 
    5034591 |  164 |biggest | 
50280287 |  31 |smallest| 

Ich versuchte Alter Table Table1 Add Column status text ; aber es scheint wie Text kein Datentyp ist. Irgendwelche Vorschläge was zu tun ist?

+0

'Tabelle ändern Table1 Statustext hinzufügen;' Können Sie das versuchen? –

Antwort

2

Getestet auf Rextester.com (denken Sie daran, vermeiden sowieso SELECT * in einer Ansicht zu verwenden)

CREATE TABLE TABLE1 (ID INTEGER); 
CREATE VIEW V1 AS SELECT * FROM TABLE1; 
INSERT INTO TABLE1 VALUES (0); 

ALTER TABLE TABLE1 ADD COLUMN STATUS TEXT;  
INSERT INTO TABLE1 (ID, STATUS) VALUES (1, 'aaa'); 

SELECT * FROM V1; 
DROP VIEW V1; 

CREATE VIEW V1 AS SELECT * FROM TABLE1; 
SELECT * FROM V1; 

Ausgang:

id 
1 0 
2 1 

    id status 
1 0 NULL 
2 1 aaa 
0

Sie müssen die Ansicht löschen und neu erstellen - Sie können eine vorhandene Ansicht nicht ändern. Und ja, Text ist ein Datentyp.

0

ich auf postgresql.org Antwort Ergab

Sie Führen Sie von pgAdmin aus, indem Sie mit der rechten Maustaste auf die Ansicht klicken und CREATE SCRIPT uncomme auswählen zt: DROP VIEW; und bearbeiten Sie die CREATE VIEW, um die Spalte zu löschen.

Wenn die Ansicht jedoch in anderen Ansichten verwendet wird, müssen Sie sie alle löschen und in der Folge neu erstellen. Alternativ können Sie die Spalten aus der Tabelle pg_catalog.pg_attribute löschen. Stellen Sie sicher, jedoch, dass Sie Sie Löschen wissen nur die, die Sie löschen möchten und nicht die anderen Tabellen Spalten ... mit der unten:

löschen von pg_attribute wo attrelid = regclass ‚yourviewname‘ und attname = ‚columnnametodrop‘

Am besten ersten paar wählt zu tun, bis Sie die Auswahl richtig haben:

select attrelid :: regclass als was auch immer, * von pg_attribute wo attname = 'columnnametodrop'

Johan Nel.

Verwandte Themen