まだ存在しない場合に一時テーブルを作成し、選択した行を追加する方法は?
質問する
46531 次
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 に答える