OS Linux Debian 5.3.1 wenn das hilft.PostgreSQL: CAST Spalte nur wenn existiert
Ich habe eine Reihe von CSV-Dateien, die ich als Tabellen in PostgreSQL importieren konnte. Sie alle haben das gleiche allgemeine Layout (d. H. Global die gleichen Spalten), jedoch variieren einige von ihnen geringfügig (d. H. Einige von ihnen können einige Spalten verpassen). Um klarer zu sein, das allgemeine Layout soll Spalten a, b, c, d, e sein, jedoch haben einige Tabellen nur Spalten a, b, d, e, andere nur Spalten b, c, d, e ...
Ich möchte eine allgemeine SQL-Abfrage zum Ändern der Art der Spalten (mit CAST) und importieren sie in einer einzigen globalen Tabelle (t_import) mit den Spalten a, b, c, d, e.
INSERT INTO t_import (a, b, c, d, e)
SELECT (
(CAST a AS integer) AS a,
(CAST b AS character varying(14)) AS b,
(CAST c AS integer) AS c,
(CAST d AS character varying) AS d,
(CAST e AS character varying) AS e
FROM t_csv;
jedoch, da einige Tabellen einige Spalten verpassen, sollte ich eine Abfrage für jede Tabelle erstellen, die ich importieren möchten, die zu ermüdend für die Anzahl der Tabellen würde ich habe.
Gibt es eine Möglichkeit zu überprüfen, ob die Spalte in der Tabelle, die ich importieren möchte, vorhanden ist, eine nur, wenn sie existiert, CAST it, sonst einen Standardwert verwenden? Auf diese Weise würde ich dieselbe Abfrage für meine verschiedenen Tabellen verwenden können, ohne Fehler zu bekommen.
Globally das ich, was ich tun möchte:
- überprüfen, ob colum in der Tabelle vorhanden ich importieren möchten,
- , wenn die Spalte vorhanden ist, CAST es in der Art Ich will und Verwendung dies für die INSERT INTO,
- Wenn die Spalte nicht existiert, verwenden Sie einen Standardwert, so dass die INSERT INTO immer noch etwas einfügen muss und ich bekomme keine Fehlermeldung.
Nach vielen Recherchen habe ich immer noch nicht die technische Lösung gefunden. Ich kämpfe mit Parametern wie IF EXISTS, WHERE EXISTS, Sub-Abfragen ... und kann das nicht schaffen. Gibt es eine Möglichkeit, dies zu tun, oder habe ich den falschen Weg, dieses Problem zu betrachten?
Sie benötigen eine Funktion, die dynamisches SQL verwendet und die Spalten z. 'information_schema.columns' –