Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: Prüfung vor CREATE TABLE

  1. #1
    peter999 ist offline Neuer Benutzer
    Registriert seit
    24.06.2009
    Beiträge
    5

    Standard Prüfung vor CREATE TABLE

    Hallo,

    ich bin neu hier und habe folgende Frage:

    bei MySQL kann ich prüfen, ob eine Tabelle existiert, bevor ich ein CREATE TABLE mache. Leider gibt es das so nicht in PSQL. (CREATE TABLE table IF NOT EXIST ...)

    Wie kann man bei PSQL verhindern, dass ein Fehler auftritt ?

    Gruß
    Peter

  2. #2
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.330

    Standard

    Zitat Zitat von peter999 Beitrag anzeigen
    Hallo,

    ich bin neu hier und habe folgende Frage:

    bei MySQL kann ich prüfen, ob eine Tabelle existiert, bevor ich ein CREATE TABLE mache. Leider gibt es das so nicht in PSQL. (CREATE TABLE table IF NOT EXIST ...)

    Wie kann man bei PSQL verhindern, dass ein Fehler auftritt ?

    Gruß
    Peter
    Code:
    test=# drop table if exists foo;
    DROP TABLE
    test=*# drop table if exists foo;
    NOTICE:  table "foo" does not exist, skipping
    DROP TABLE
    Andreas
    --
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Zitat Zitat von peter999 Beitrag anzeigen
    Hallo,

    Wie kann man bei PSQL verhindern, dass ein Fehler auftritt ?

    Gruß
    Peter
    damit du dich das beim naechsten dbms (oracle sqlserver etc.) nicht wieder frage musst: information_schema - gibt es inzwischen auch bei MySQL

    Code:
    select * from information_schema.tables 
    where table_schema = ...
      and table_name = ...
    fehlerbehandlung musst du aber sowieso bauen - warum also nicht einfach das create absetzen und auf den fehler reagieren

  4. #4
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.330

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    damit du dich das beim naechsten dbms (oracle sqlserver etc.) nicht wieder frage musst: information_schema - gibt es inzwischen auch bei MySQL

    Code:
    select * from information_schema.tables 
    where table_schema = ...
      and table_name = ...
    Du erklärst jetzt bitte noch das SQL,wie er in Abhängigkeit davon die Tabelle erstellt oder nicht, ohne eine Fehlermeldung zu erhalten. Egal, ob Tabelle schon existiert oder nicht.

    Andreas
    --
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    gern - indem er das statement absetzt und in abhaengigkeit von der ergebnismenge (die leer sein sollte - wenn die table oder das view nicht existiert) - das create ausfuehrt - oder eben nicht.

    leider ist das beschriebene problem nicht mit nur einem statement zu loesen - auch mit drop nicht, das fataler weise die table dropen wuerde wenn sie existiert - das wollte er auch nicht.

    daher mein hinweis, den fehler einfach geschehen zu lassen und geeignet drauf reagieren ..

  6. #6
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.018

    Standard

    So etwas ähnliches betreibe ich hier schon:

    create language if not exist - ads' corner

    Die Funktion kann man noch temporär gestalten.
    Auf alle Fälle funktioniert das Statement, ohne Fehler zu verursachen und lässt sich einfach auf Tabellen statt auf Sprachen umschreiben.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  7. #7
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    schön

    weisst du zufaellig warum es ein adäquates IF NOT EXIST bei CREATE TABLE nicht gibt? etwas wunderlich ist das schon - weil an zig anderen stellen hat man derartiges vorgesehen - ironischer weise sogar bei DROP TABLE - bei funktionen z.B. - einfach weil es praktisch ist ..

    am fortschrittlichesten in der welt waere, wenn Postgres eine bedingung bei jedem DDL statement erlauben wuerde - und zwar ein beliebiges

    CREATE ..
    IF <boolean expression> ..

    DROP ..
    IF <boolean expression> ..

    ALTER ..
    IF <boolean expression> ..

    wobei boolean expression dann auch wieder ein select statement enthalten koennte

    das wäre mal was

  8. #8
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.018

    Standard

    Dir ist der Unterschied zwischen CREATE und DROP schon klar, oder?

    Wenn ich eine Tabelle löschen möchte, die es nicht gibt, ist das nicht unbedingt ein Problem.
    Wenn ich eine Tabelle erstellen möchte, die es schon gibt - wer garantiert mir, dass das die Tabelle mit der gleichen Struktur ist, die ich haben möchte? Das ist ein Problem. Das Problem möchte ich auch nicht mit einem "Ach, passt scho" umgehen. Wenn mir das so egal ist, kann ich ja ein DROP ... IF davor setzen und das Problem ist aus der Welt.

    Darum gibt es für DROP ein IF und für CREATE nicht.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  9. #9
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Dir ist der Unterschied zwischen CREATE und DROP schon klar, oder?
    Muss das sein? Niemand zwingt Dich zu antworten.
    Wenn ich eine Tabelle löschen möchte, die es nicht gibt, ist das nicht unbedingt ein Problem.
    Wenn ich eine Tabelle erstellen möchte, die es schon gibt - wer garantiert mir, dass das die Tabelle mit der gleichen Struktur ist, die ich haben möchte?
    dann sollte CREATE TABLE .. IF eben nicht nur den Namen, sondern die gesamte Signatur der Table beruecksichten .. also auch kein Problem ..

    dann gibt es keinen Fehler wenn es der gleiche Table-Typ ist - aber trotzdem einen Fehler wenn die Table existiert, aber nicht vom selben Typ.

    Das gleiche Prinzip wuerde man dann auf Trigger und Constraints anwenden - was insgesammt dazu fuehrt, dass das Modell letztendlich "vorhanden" ist wie ich es brauche.

    Das ist ein Problem.
    leuchtet ein - aber ist lösbar

  10. #10
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.018

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    Muss das sein? Niemand zwingt Dich zu antworten.
    Dann frag mich halt nicht *wunder* Zuerst fragen, warum das so ist, und sich dann beschweren, wenn man es dir erklärt.


    dann sollte CREATE TABLE .. IF eben nicht nur den Namen, sondern die gesamte Signatur der Table beruecksichten .. also auch kein Problem ..
    Richtig. Also schreib bitte einen Patch dafür und reich ihn ein.


    leuchtet ein - aber ist lösbar
    Ist schließlich Open-Source Software. Wenn du das so brauchst, kannst du das programmieren.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum