Seite 1 von 1

PostgreSQL "ALTER TABLE"

Verfasst: Do, 09. Aug 2012 8:06
von AUGE_OHR
hi,

zum modifizieren einer Table Structure verwende ich diesen Code

Code: Alles auswählen

IF lNew
   cQuery += "CREATE TABLE " + cTable + " ( "
ELSE
   cQuery += "ALTER TABLE " + cTable + " ADD COLUMN "
ENDIF
das funktioniert auch soweit, aber jedes "neue" Field wird "am Ende" angehängt ...

ich hätte aber gerne das "neue" Field vor die "__"Fields "eingeordnet" ... geht das ? wenn wie ?

Re: PostgreSQL "ALTER TABLE"

Verfasst: Do, 09. Aug 2012 8:11
von georg
Hallo, Jimmy -


das ist ein Auszug aus dem ALTER TABLE Syntax-Diagramm von MySQL:
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]

alter_specification:
table_options
| ADD [COLUMN] col_name column_definition
[FIRST | AFTER col_name ]

Code: Alles auswählen

Quelle: http://dev.mysql.com/doc/refman/5.5/en/alter-table.html
Was sagt die PostgreSQL-Dokumentation dazu?

Andere Frage: warum ist Dir die Feldreihenfolge wichtig?


Gruss,

Georg

Re: PostgreSQL "ALTER TABLE"

Verfasst: Do, 09. Aug 2012 8:27
von AUGE_OHR
georg hat geschrieben:das ist ein Auszug aus dem ALTER TABLE Syntax-Diagramm von MySQL:
...
Was sagt die PostgreSQL-Dokumentation dazu?
im Help file sind die folgende Syntax Anweisungen aufgeführt

Code: Alles auswählen

ALTER TABLE [ ONLY ] tabelle [ * ]
   ADD [ COLUMN ] spalte typ [ spalten_constraint [ ... ] ]
ALTER TABLE [ ONLY ] tabelle [ * ]
   DROP [ COLUMN ] spalte [ RESTRICT | CASCADE ]
ALTER TABLE [ ONLY ] tabelle [ * ]
   ALTER [ COLUMN ] spalte { SET DEFAULT wert | DROP DEFAULT }
ALTER TABLE [ ONLY ] tabelle [ * ]
   ALTER [ COLUMN ] spalte { SET | DROP } NOT NULL
ALTER TABLE [ ONLY ] tabelle [ * ]
   ALTER [ COLUMN ] spalte SET STATISTICS ganze_zahl
ALTER TABLE [ ONLY ] tabelle [ * ]
   ALTER [ COLUMN ] spalte SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
ALTER TABLE [ ONLY ] tabelle [ * ]
   RENAME [ COLUMN ] spalte TO neue_spalte
ALTER TABLE tabelle
   RENAME TO neue_tabelle
ALTER TABLE [ ONLY ] tabelle [ * ]
   ADD tabellen_constraint
ALTER TABLE [ ONLY ] tabelle [ * ]
   DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
ALTER TABLE tabelle
   OWNER TO neuer_eigentümer
und als Beispiele

Code: Alles auswählen

Beispiel

Um einer Tabelle eine Spalte vom Typ varchar hinzuzufügen:
ALTER TABLE händler ADD COLUMN adresse varchar(30);

Um eine Spalte aus einer Tabelle zu löschen:
ALTER TABLE händler DROP COLUMN adresse RESTRICT;

Um eine bestehende Spalte umzubenennen:
ALTER TABLE händler RENAME COLUMN adresse TO stadt;

Um eine bestehende Tabelle umzubenennen:
ALTER TABLE händler RENAME TO lieferanten;

Einer Spalte einen NOT-NULL-Constraint hinzuzufügen:
ALTER TABLE händler ALTER COLUMN straße SET NOT NULL;

Um einen NOT-NULL-Constraint von einer Spalte zu entfernen:
ALTER TABLE händler ALTER COLUMN straße DROP NOT NULL;

Um einer Tabelle einen Check-Constraint hinzuzufügen:
ALTER TABLE händler ADD CONSTRAINT plzchk CHECK (char_length(plz) = 5);

Um einen Check-Constraint aus einer Tabelle und allen Kindtabellen zu entfernen:
ALTER TABLE händler DROP CONSTRAINT plzchk;

Um einer Tabelle einen Fremdschlüssel hinzuzufügen:
ALTER TABLE händler ADD CONSTRAINT adrfk FOREIGN KEY (adresse) REFERENCES adressen
(adresse) MATCH FULL;

Um einer Tabelle einen (mehrspaltigen) Unique Constraint hinzuzufügen:
ALTER TABLE händler ADD CONSTRAINT hdl_id_plz_schlüssel UNIQUE (hdl_id, plz);

Um einer Tabelle einen automatisch benannten Primärschlüssel-Constraint hinzuzufügen, wobei beachtet werden muss, dass eine Tabelle immer nur einen Primärschlüssel haben kann:
ALTER TABLE händler ADD PRIMARY KEY (hdl_id);
georg hat geschrieben:Andere Frage: warum ist Dir die Feldreihenfolge wichtig?
nur weil mit das "stört" das die "default" in pgAdmin.EXE dann "hinten" sind.
in PGu.EXE kann ich bei der Field Auswahl ja vorher "sortieren" und hab dann die "__" wieder "hinten"

Re: PostgreSQL "ALTER TABLE"

Verfasst: Do, 09. Aug 2012 8:49
von georg
Hallo, Jimmy -


Du hast ja immer noch die Option, die alte Tabelle umzubenennen, eine neue nach Wunsch (Feldfolge) zu erstellen und dann die Daten zu übernehmen.


Gruss,

Georg