2017-09-16 1 views
1

Ich versuche INSERT ein zukünftiges Datum in eine timestamp with time zone Spalte in einer Tabelle in Postgres 9.6.2. Ich möchte, dass dieses Datum die aktuelle Transaktionszeit plus ein beliebiges Intervall ist, z. B. 1 Stunde. Ich verstehe, wie Sie Datum/Uhrzeit Arithmetik in einer SELECT Anweisung ausführen, aber die gleiche Syntax NOW() + INTERVAL '1 hour' scheint nicht in einer INSERT-Anweisung gültig zu sein.Wie jetzt einfügen() + INTERVAL in Postgres 9.x

Abgesehen davon, dies auf der Anwendungsebene zu erreichen, ist es möglich, dies mit einer einzigen INSERT-Anweisung mit Datum/Uhrzeit-Arithmetik zu erreichen? Wenn nicht, was wäre die beste Praxis in dieser Situation?

Antwort

2

Ich glaube, Sie haben es richtig - das ist für mich gearbeitet:

insert into barcode (id,barcode,active,created,updated) 
    values (111,'23432', true, NOW() + INTERVAL '1 hour',NOW()); 

ich Postgres 9.4.13 leite.

+0

Das ist ziemlich interessant. Die von Ihnen bereitgestellte SQL funktioniert genau so, wie ich es möchte, und genau, wie ich erwartet habe, dass dies normal funktioniert, aber nur, wenn ich eine vollständige Abfrage mit dieser Syntax durchführe. Wenn ich die Abfrage mit meiner node.js-Middleware UND in pgadmin ausführe, erhalte ich Syntaxfehler. 'Fehler: Ungültige Eingabesyntax für den Typ Zeitstempel mit Zeitzone:" NOW() + INTERVAL '1 Stunde' "' Gibt es etwas, das ich hier fehlt über die richtige Syntax mit Anführungszeichen zu verwenden? Ich habe den Eindruck, dass pgadmin beim Bearbeiten von Tabellendaten Zitate um Werte anhängt. – ajxs

+2

Es ist wahrscheinlich ein Fluchtproblem mit den Zitaten – user2182349

+1

Sie haben Recht. Es war ein Fluchtproblem mit den Zitaten. Es sieht so aus, als würde postgres den Ausdruck 'NOW() + INTERVAL '1 Stunde' nicht analysieren, wenn er in doppelte Anführungszeichen gesetzt wird. Das ist ziemlich verwirrend. Markierte dich als die richtige Antwort, da du meine erste Anfrage richtig beantwortet hast! Vielen Dank! – ajxs