Posts mit dem Label Postgres werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Postgres werden angezeigt. Alle Posts anzeigen

Freitag, 15. Juli 2011

Update multiple columns with select statement in Postgres

Wenn man mehrere Spalten in per SELECT updaten will, muss man in Postgres eine spezielle Syntax verwenden. Die Standard Update Syntax funktioniert (noch) nicht mehr hier unter 'Compatibility'.

Das nachfolgende Beispiel zeigt die Möglichkeiten für das gewünschte Update auf mehrere Spalten:

CREATE TEMP TABLE test (id int, a varchar, b varchar);

INSERT INTO test VALUES (1, 'a', 'b');

UPDATE test SET (a, b) = ('c', 'd') WHERE id = 1; -- << OK

UPDATE test SET a = (SELECT 'c'), b = (SELECT 'd') WHERE id = 1; -- << OK

UPDATE test SET (a, b) = (SELECT 'c', 'd') WHERE id = 1; -- << FAIL

UPDATE test SET a = sub.a, b = sub.b FROM (SELECT 'c' AS a, 'd' AS b) sub WHERE id = 1; -- << OK


Donnerstag, 26. Mai 2011

ALTER TABLE ADD COLUMN IF EXISTS (Postgres)

Manchmal möchte man eine Spalte in Abhängigkeit von deren Existenz hinzufügen. Da man ALTER TABLE ADD COLUMN IF EXISTS nicht direkt auf eine Postgres Table ausführen kann, ist nachfolgend ein kleiner workaround definiert, der sogar die mögliche Existenz von Tabellen in  mehreren DB Schema berücksichtigt.


SELECT 'ALTER TABLE '||tablename||' ADD COLUMN my_new_column integer' AS update_stmt
FROM pg_tables
WHERE tablename = 'my_table_name' 
AND tablename NOT IN (
 SELECT table_name 
 FROM information_schema.columns
 WHERE table_catalog = 'my_catalog'
 AND table_schema = 'my_schema'
 AND table_name = 'my_table_name' 
 AND column_name = 'my_new_column'

Montag, 7. Februar 2011

Ausgewählte Tabellen aus Postgres exportieren

Anhand der Dokumentation von Postgres kann man sich mit pg_dump ein Kommando für den Export von ausgewählten Tabellen erstellten:

pg_dump.exe -h <hier die IP> -p <hier der Port> -U <username> -O -c -i -d -t "(pattern_one_*|pattern_two_*)" -f "C:\patterndump.sql" <dbname>