Anzeige:
Ergebnis 1 bis 10 von 10

Thema: [PostgreSQL] Wie constraints ohne namen löschen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182

    [PostgreSQL] Wie constraints ohne namen löschen?

    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
    Geändert von Lin728 (21-08-2017 um 15:59 Uhr)

  2. #2
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Versuch es doch mal mit pgadmin3, da kriegst du eine Baumansicht. Vielleicht klappt es so.
    Das Ziel ist das Ziel.

  3. #3
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    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;
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.08.2001
    Beiträge
    57
    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...

  5. #5
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    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.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  6. #6
    Registrierter Benutzer
    Registriert seit
    27.12.2002
    Ort
    Matrix
    Beiträge
    194
    Zitat Zitat von ceisserer
    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

  7. #7
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    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.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  8. #8
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    Zitat Zitat von Turbohummel
    .. MySQL und DB2 nicht...
    ein wenig ot: mssql macht's mit "select * into neue_tabelle from alte tabelle"
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  9. #9
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182

    Schade :-/

    Schade bei mir funtzts nicht:

    Die Tabellendefinition ist:
    Code:
    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);
    Code:
    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.
    Geändert von Lin728 (21-08-2017 um 15:59 Uhr)

  10. #10
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182
    Gut, hat sich erledigt. Anscheinend hab ich die Tabellendefinition irgendwann mal geändert.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •