特定のregister_type
のデータのみを選択する一時テーブルを作成しようとしています。このクエリを作成しましたが、機能しません。
$ CREATE TABLE temp1
(Select
egauge.dataid,
egauge.register_type,
egauge.timestamp_localtime,
egauge.read_value_avg
from rawdata.egauge
where register_type like '%gen%'
order by dataid, timestamp_localtime ) $
PostgreSQLを使用しています。
クエリの何が問題なのか教えてください。
あなたはおそらく _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
_
これにより、一時テーブルが作成され、そこにデータがコピーされます。 静的スナップショットデータについては、気にしないでください。通常のテーブルと同じですが、RAM _temp_buffers
_が十分に高く設定されている場合、現在のsession内でのみ表示され、最後に停止します_ON COMMIT DROP
_で作成された場合、transactionの最後で終了します。
一時テーブルは、デフォルトスキーマ検索パスで最初に表示され、スキーマで修飾されていない限り、同じ名前の他の可視テーブルを非表示にします。
dynamicが必要な場合は、 _CREATE VIEW
_ -完全に別の話。
SQL標準も定義しており、Postgresは以下もサポートしています。 _。SELECT INTO
_
ただし、使用は推奨されません :
新しいコードでは、この目的で_
CREATE TABLE AS
_を使用するのが最適です。
2番目の構文バリアントは本当に必要ありません。また、plpgsql
での割り当てには_SELECT INTO
_が使用されます。この場合、SQL構文は使用できません。
関連する:
CREATE TABLE LIKE (...)
は、structureを別のテーブルからのみコピーし、データはコピーしません。
LIKE
句は、新しいテーブルがすべての列名、データ型、およびnull以外の制約を自動的にコピーするテーブルを指定します。
単一のクエリのためだけに「一時的な」テーブルが必要な場合(そして破棄する場合)、CTEの「派生テーブル」サブクエリのオーバーヘッドはかなり小さくなります。
http://www.postgresql.org/docs/9.2/static/sql-createtable.html
CREATE TEMP TABLE temp1 LIKE ...