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

Změna hodnoty časového pásma dat

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;



  1. Přejmenujte sloupec SQL Server 2008

  2. Výkon databáze:filtrování podle sloupce vs. samostatná tabulka

  3. Jak importovat soubor XML v Oracle SQL Developer?

  4. Zpracování výjimek cizího klíče v PHP