Daten in Tabellen importieren

PostgreSQL stellt zwei Möglichkeiten bereit, Daten direkt in eine anzulegende Tabelle zu schreiben: Das Kommando SELECT INTO ist der Verbreitetere der beiden Befehle und bietet reichlich Möglichkeiten:

test=# \h SELECT INTO
Command:     SELECT INTO
Description: define a new table from the results of a query
Syntax:
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ AS output_name ] [, ...]
    INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start ]
    [ FOR UPDATE [ OF tablename [, ...] ] ]

Im einfachsten Fall kann eine Tabelle wie folgt erzeugt werden:

test=# SELECT 1+1 AS tmp INTO t_table;
SELECT
test=# SELECT * FROM t_table;
 tmp
-----
   2
(1 row)

Wie man der Syntaxübersicht entnehmen kann, stellt SELECT INTO im Prinzip alle Features zur Verfügung, die von SELECT auch bereitgestellt werden. Klarerweise sind einige Syntaxelemente im SELECT INTO Fall nicht sonderlich sinnvoll.

Neben SELECT INTO bietet PostgreSQL noch die Möglichkeit, CREATE TABLE AS zu verwenden. CREATE TABLE AS ist ein wenig intuitiver - bietet aber nur eingeschränkte Möglichkeiten:

test=# \h CREATE TABLE AS
Command:     CREATE TABLE AS
Description: define a new table from the results of a query
Syntax:
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name [
(column_name [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ]
    AS query

CREATE TABLE ist sehr beliebt und wird oft anstelle von SELECT INTO verwendet.




Cybertec Schönig & Schönig GmbH
PostgreSQL support, training, consulting
www.postgresql-support.de