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
--
PostgreSQL Hosting
http://www.amazon.de/gp/registry/2APKFICAIYMWBads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
https://www.xing.com/profile/Andreas_Kretschmer7
damit du dich das beim naechsten dbms (oracle sqlserver etc.) nicht wieder frage musst: information_schema - gibt es inzwischen auch bei MySQL
fehlerbehandlung musst du aber sowieso bauen - warum also nicht einfach das create absetzen und auf den fehler reagierenCode:select * from information_schema.tables where table_schema = ... and table_name = ...
--
PostgreSQL Hosting
http://www.amazon.de/gp/registry/2APKFICAIYMWBads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
https://www.xing.com/profile/Andreas_Kretschmer7
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 ..
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
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
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
Muss das sein? Niemand zwingt Dich zu antworten.
dann sollte CREATE TABLE .. IF eben nicht nur den Namen, sondern die gesamte Signatur der Table beruecksichten .. also auch kein Problem ..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 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.
leuchtet ein - aber ist lösbarDas ist ein Problem.
Dann frag mich halt nicht *wunder* Zuerst fragen, warum das so ist, und sich dann beschweren, wenn man es dir erklärt.
Richtig. Also schreib bitte einen Patch dafür und reich ihn ein.dann sollte CREATE TABLE .. IF eben nicht nur den Namen, sondern die gesamte Signatur der Table beruecksichten .. also auch kein Problem ..
Ist schließlich Open-Source Software. Wenn du das so brauchst, kannst du das programmieren.leuchtet ein - aber ist lösbar
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
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen