2016-01-04 5 views
8

Gibt es eine Möglichkeit, eine Tabelle mit einer Zeitstempelspalte zu erstellen, die jetzt standardmäßig verwendet wird?Redshift: Erstellen einer Tabelle mit der Timestamp-Spalte standardmäßig auf Now()

Alle folgenden Schritte sind erfolgreich, aber beim Einfügen fehlgeschlagen.

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); 

Dann auf Insert:

 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. 

Ich versuchte, wie weiter unten andere Aromen, aber alle scheitern.

a) versucht, mit jetzt in einfache Anführungszeichen ‚jetzt‘ gelang es schaffen aber nicht mit einem anderen Fehler

b) ohne die Zeitzone versucht, schaffen es gelungen, einfügen fehlgeschlagen.

Antwort

17

Sie können SYSDATE oder GETDATE() verwenden, um einen aktuellen Zeitstempelwert einzugeben. Hier ist ein Beispiel.

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

Genau das habe ich gemacht. –

+1

Haben Sie DEFAULT GETDATE() ausprobiert? – pcothenet

+0

Ja, 'DEFAULT GETDATE()' funktioniert auch. –