2016-01-04 6 views
8

タイムスタンプの列をデフォルトに設定してテーブルを作成する方法はありますか?Redshift:タイムスタンプの列をNow()にデフォルト設定するテーブルを作成する

次のいずれかが作成に成功しますが、挿入に失敗します。

CREATE TABLE MyTable 
(
device_id   VARCHAR(64) NOT NULL encode lzo, 
app_id   VARCHAR(150) NOT NULL distkey encode lzo, 
retrieval_date TIMESTAMP without time zone default (now() at time zone 'utc') encode lzo 
) 
diststyle key 
compound sortkey(app_id,device_id); 

はその後、インサート上:

 insert into MyTable (device_id,app_id) values('a','b'); 
INFO: Function "timezone(text,timestamp with time zone)" not supported. 
INFO: Function "now()" not supported. 
ERROR: Specified types or functions (one per INFO message) not supported on Redshift tables. 

私は以下のように他のフレーバーを試してみましたが、すべて失敗します。 「今」一重引用符で、今で試してみました

a)は、成功しましたが成功して作成するタイムゾーンなしにしようとした別のエラー

B)、で作成に失敗しました、挿入に失敗しました。

答えて

17

SYSDATEまたはGETDATE()を使用すると、現在のタイムスタンプ値を設定できます。ここに例があります。

dev=> create table my_table (id int, created_at datetime default sysdate); 
CREATE TABLE 

dev=> insert into my_table (id) values (1); 
INSERT 0 1 

dev=> select * from my_table; 
id |  created_at 
----+--------------------------- 
    1 | 2016-01-04 19:07:14.18745 
(1 row) 
+0

これは私のやり方です。 –

+1

DEFAULT GETDATE()を試しましたか? – pcothenet

+0

はい、 'DEFAULT GETDATE()'も機能します。 –