sql >> Databáze >  >> RDS >> PostgreSQL

Časové razítko Postgres now() se nemění, když skript funguje

Z TFM, zvýraznění moje:

9.9.4. Aktuální datum/čas

PostgreSQL poskytuje řadu funkcí, které vracejí hodnoty související s aktuálním datem a časem. Tyto standardní funkce SQL všechny vrací hodnoty na základě času zahájení aktuální transakce :

CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TIME(precision)
CURRENT_TIMESTAMP(precision)
LOCALTIME
LOCALTIMESTAMP
LOCALTIME(precision)
LOCALTIMESTAMP(precision)

...

Protože tyto funkce vracejí čas zahájení aktuální transakce, jejich hodnoty se během transakce nemění. Toto je považováno za rys:záměrem je umožnit jedné transakci, aby měla konzistentní představu o „aktuálním“ čase, takže vícenásobné úpravy v rámci stejné transakce nesou stejné časové razítko.

PostgreSQL také poskytuje funkce, které vracejí počáteční čas aktuálního příkazu a také aktuální aktuální čas v okamžiku, kdy je funkce volána. Úplný seznam nestandardních časových funkcí SQL je:

transaction_timestamp()
statement_timestamp()
clock_timestamp()
timeofday()
now()

transaction_timestamp() je ekvivalentní CURRENT_TIMESTAMP , ale je pojmenován tak, aby jasně odrážel, co vrací. statement_timestamp() vrací čas zahájení aktuálního příkazu (konkrétněji čas přijetí poslední zprávy příkazu od klienta).statement_timestamp() a transaction_timestamp() vrátí stejnou hodnotu během prvního příkazu transakce, ale může se lišit během následujících příkazů. clock_timestamp() vrátí aktuální aktuální čas , a proto se jeho hodnota mění i v rámci jednoho příkazu SQL. timeofday() je historická funkce PostgreSQL. Jako clock_timestamp() , vrací aktuální aktuální čas, ale jako formátovaný textový řetězec, nikoli časové razítko s hodnotou časového pásma.now() je tradiční PostgreSQL ekvivalentní k transaction_timestamp() .




  1. Nelze vyřešit konflikt řazení

  2. Jak vybrat správné datové typy

  3. 7645 Nula nebo prázdný fulltextový predikát

  4. Jak zjistit třetí nebo nᵗʰ maximální plat z platové tabulky?