sql >> データベース >  >> RDS >> PostgreSQL

SQLでの一時テーブルの作成

    おそらく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の結果で更新


    1. PostgreSQLストリーミングレプリケーションと論理レプリケーション

    2. LINQ to SQL Take w / o Skipは、複数のSQLステートメントを引き起こします

    3. SQL SELECT AVG

    4. libpqソースはどこで入手できますか?