おそらく必要ですCREATE TABLE AS
- TEMPORARY
( TEMP
)テーブルでも機能します:
CREATE TEMP TABLE temp1 AS
SELECT dataid
, register_type
, timestamp_localtime
, read_value_avg
FROM rawdata.egauge
WHERE register_type LIKE '%gen%'
ORDER BY dataid, timestamp_localtime;
これにより、一時テーブルが作成され、データがそこにコピーされます。データの静的スナップショットです。これは通常のテーブルと同じですが、temp_buffers
十分に高く設定されている場合は RAM に常駐します。現在のセッション内でのみ表示され、セッションの最後に消滅します。それを使用して作成すると、トランザクションON COMMIT DROP
の終了時に死亡します。
一時テーブルはデフォルトのスキーマ検索パスで最初に来て、スキーマで修飾されていない限り、同じ名前の他の可視テーブルを非表示にします:
dynamicが必要な場合はCREATE VIEW
、まったく別のストーリーを探します。
SQL 標準でも定義されており、Postgres もサポートしていますSELECT INTO
。しかし、その使用はお勧めできません:
CREATE TABLE AS
この目的には、新しいコードで使用するのが最適です。
2 番目の構文バリアントは実際には必要なく、結果的に SQL 構文がSELECT INTO
使用できない で代入に使用されます。plpgsql
関連している:
CREATE TABLE LIKE (...)
別のテーブルから構造をコピーするだけで、データはコピーしません:
このLIKE
句は、新しいテーブルがすべての列名、それらのデータ型、およびそれらの非 null 制約を自動的にコピーするテーブルを指定します。
単一のクエリの目的のためだけに「一時」テーブルが必要な場合 (その後破棄する場合)、CTE またはサブクエリの「派生テーブル」のオーバーヘッドはかなり少なくなります。