おそらく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
で作成した場合 トランザクションの終了時に終了します 。
一時テーブルは、デフォルトのスキーマ検索パスの最初に表示されます 、スキーマ修飾されていない限り、同じ名前の他の表示可能なテーブルを非表示にします:
- search_pathは識別子の解決と「現在のスキーマ」にどのように影響しますか
動的が必要な場合 、 CREATE VIEW
を探しています -まったく別の話です。
SQL標準も定義しており、Postgresは次もサポートしています。 。ただし、その使用はお勧めしません:SELECT INTO
CREATE TABLE AS
を使用するのが最適です この目的のために新しいコードで。
2番目の構文バリアント、およびSELECT INTO
は実際には必要ありません。 plpgsql
での割り当てに使用されます 、SQL構文が結果的に不可能な場合。
関連:
- 2つのテーブルを新しいテーブルに結合して、他のテーブルから選択した行が無視されるようにします
- エラー:デフォルト値を持つ入力パラメータは、Postgresでもデフォルトを持っている必要があります
CREATE TABLE LIKE (...)
構造のみをコピーします 別のテーブルからデータなし:
LIKE
句は、新しいテーブルがすべての列名、それらのデータ型、およびそれらのnull以外の制約を自動的にコピーするテーブルを指定します。
単一のクエリのためだけに「一時的な」テーブルが必要な場合(そしてそれを破棄する場合)、「派生テーブル」 CTEまたはサブクエリでは、オーバーヘッドが大幅に少なくなります:
- postgresqlのクエリの実行プランを手動で変更しますか?
- PostgreSQLで2つのSELECTクエリを組み合わせる
- 計算された選択値を再利用する
- 単一のクエリで複数のCTE
- 別のSQLの結果で更新