PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PostgreSQL] Wie constraints ohne namen löschen?



Lin728
10-05-2006, 19:02
Hallo,

Ich war leider so faul vor einiger Zeit constraints ohne Namen zu vergeben, wohl in der Hoffnung dass dies schon so passen würde. So kann man sich täuschen ;)

Wie kann man in postgres constraints ohne namen löschen, falls die gesamte tabelle kein constraint mit namen hat.
Hab schon mehreres versucht, aber er scheint unbedingt ein constraint mit Namen zu erwarten obwohl die Postgres-Doku erwäht dass auch constraints ohne Namen gelöscht werden.
Ich habs bisher so versucht:
alter table customer drop constraint "";
alter table customer drop constraint "*";
alter table customer drop constraint;

leider immer ohne Erfolg :-/

Vieleicht hat das ja schon mal jemand gemacht (machen müssen), würd mich über nen kleinen Tipp sehr freuen.

Danke im Vorraus

mwanaheri
10-05-2006, 20:34
Versuch es doch mal mit pgadmin3, da kriegst du eine Baumansicht. Vielleicht klappt es so.

Turbohummel
11-05-2006, 17:21
Hallo,

deswegen gibt man Constraints Namen, die Erfahrung habe ich auch schon gemacht.

Meine Lösung (bei großen Tabellen Zeit lassen):

CREATE TABLE buffer [gleiche Felder wie die ursprungstabelle]
INSERT INTO buffer (SELECT * FROM ursprungstabelle];
DROP TABLE ursprungstabelle;
CREATE table ursprungstabelle; (diesmal mit Constraint-Namen)
INSERT INTO ursprungstabelle (SELECT * FROM buffer);
DROP TABLE buffer;

kehj
11-05-2006, 18:20
Tach,

zu meinem Vorredner: gibt es für postgresql einen Befehlt wie
create table as
select *
from foo

?

Zumindestens in der Oracle-Welt ist das möglich...

Turbohummel
11-05-2006, 20:51
Oracle und MaxDB könnens, MySQL und DB2 nicht. Wies mit PostGres aussieht kann ich net sagen.
Aber da das ein einmaliger Vorgang ist wäre die längere Variante auch kein Problem. Wäre ja nur 2 Statements mehr.

Jasper
11-05-2006, 21:57
Vieleicht hat das ja schon mal jemand gemacht (machen müssen), würd mich über nen kleinen Tipp sehr freuen.


postgres vergibt eigene namen wie oracle auch. in psql '\d tablename' liefert die constraint-namen, das löschen ist dann formalität.

-j

Turbohummel
14-05-2006, 11:49
Welche sich aber nur mit Zugriff auf die Systemtabelle auslesen lassen. Da die Contraintnamen bei Oracle wilde Konstrukte sind, sind die Constraint-Namen leider auf jeder Maschine anders.
Auf der Produktiv-Maschine stand mir kein Zugriff auf die Systemtabellen zur Verfügung. weswegen ich diesen Weg nehmen musste.
Dürfte auf jedem Webspace nicht anders sein.

elrond
15-05-2006, 06:37
.. MySQL und DB2 nicht...

ein wenig ot: mssql macht's mit "select * into neue_tabelle from alte tabelle"

Lin728
19-05-2006, 13:28
Schade bei mir funtzts nicht:

Die Tabellendefinition ist:


CREATE TABLE customer (key INTEGER PRIMARY KEY NOT NULL, custgroup INTEGER REFERENCES custtype(key) NOT NULL, anrede VARCHAR(10), vorname VARCHAR(127), nachname VARCHAR(127) NOT NULL, instutut VARCHAR(127), konditionen VARCHAR(2047), strasse VARCHAR(127), land VARCHAR(5), plz VARCHAR(10), ort VARCHAR(127), tel VARCHAR(63), firmentel VARCHAR(63), mobil VARCHAR(63), fax VARCHAR(63), email VARCHAR(127), custdate DATE, gebdate DATE, ansprechperson VARCHAR(127), werberwuenscht SMALLINT, datanotvalid SMALLINT);




kundendb=# INSERT INTO customer_buffer (SELECT * FROM customer);
FEHLER: Spalte datanotvalid hat Typ smallint, aber der Ausdruck hat Typ character varying
HINT: Sie mssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen.

Lin728
19-05-2006, 14:49
Gut, hat sich erledigt. Anscheinend hab ich die Tabellendefinition irgendwann mal geändert.