Je to hodně nastavení časového pásma pro relaci importu je efektivnější než aktualizovat hodnoty později.
Mám dojem, že časové pásmo si představujete jako nastavení, které platí pro jinak nezměněné hodnoty v tabulkách. Jenže ono to tak vůbec není. Představte si to jako modifikátor vstupu / výstupu. Aktuální timestamp
hodnoty (s časovým pásmem nebo bez něj) jsou vždy interně uloženo jako časová razítka UTC (počet sekund od '2000-01-01 00:00'
). Mnohem více podrobností:
UPDATE
ve vašem druhém příkladu zdvojnásobuje velikost tabulky, protože každý jednotlivý řádek je zrušen a přidána nová verze (takto UPDATE
spolupracuje s MVCC
v Postgresu). Kromě drahé operace, VACUUM
bude muset později udělat více práce, aby uklidil nadýmání stolu. Velmi neefektivní.
Je to dokonale bezpečné na SET
místní časové pásmo pro relaci. To nijak neovlivňuje souběžné operace. BTW, SET SESSION
je stejný jako prostý SET
protože SESSION
je stejně výchozí.
Pokud chcete být naprosto jistě, můžete toto nastavení omezit na aktuální transakci pomocí SET LOCAL
. Cituji manuál zde
Dejte dohromady:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Zkontrolujte:
SHOW timezone;