24

まだ存在しない場合に一時テーブルを作成し、選択した行を追加する方法は?

4

1 に答える 1

49

CREATE TABLE AS

最も簡単で最速の方法です:

CREATE TEMP TABLE tbl AS
SELECT * FROM tbl WHERE ... ;

使用しないでくださいSELECT INTO。見る:

テーブルが既に存在するかどうかわからない

CREATE TABLE IF NOT EXISTS ...バージョン Postgres 9.1 で導入されました。
古いバージョンの場合は、この関連する回答で提供されている関数を使用してください。

それで:

INSERT INTO tbl (col1, col2, ...)
SELECT col1, col2, ...

一時テーブルが既に存在する場合、コードで何か問題が発生している可能性があります。テーブルなどでデータを複製しないようにしてください。または、次の段落を検討してください...

ユニークな名前

一時テーブルは、現在のセッション内でのみ表示されます (トランザクションと混同しないでください!)。したがって、テーブル名が他のセッションと競合することはありません。セッション内で一意の名前が必要な場合SEQUENCEは、動的 SQL を使用して以下を利用できます。

1 回作成します。

CREATE SEQUENCE tablename_helper_seq;

DOステートメント (または plpgsql 関数)を使用できます。

DO
$do$
BEGIN
   EXECUTE
   'CREATE TEMP TABLE tbl' || nextval('tablename_helper_seq'::regclass) || ' AS
    SELECT * FROM tbl WHERE ... ';

   RAISE NOTICE 'Temporary table created: "tbl%"' || ', lastval();
END
$do$;

lastval()currval(regclass)動的に作成されたテーブル名を返すのに役立ちます

于 2013-09-20T15:22:42.500 に答える