sql >> Database teknologi >  >> RDS >> PostgreSQL

Ændring af tidszoneværdi for data

Det er meget mere effektivt at indstille tidszonen for din importsession end at opdatere værdierne senere.

Jeg får indtryk af, at du tænker på tidszonen som en indstilling, der gælder for ellers uændrede værdier i tabellerne. Men sådan er det slet ikke. Tænk på det som en input/output modifikator. Faktisk timestamp værdier (med eller uden tidszone) er altid gemt som UTC-tidsstempler internt (antal sekunder siden '2000-01-01 00:00' ). Mange flere detaljer:

UPDATE i dit andet eksempel fordobles størrelsen af ​​tabellen, da hver enkelt række er ugyldig og en ny version tilføjet (det er sådan UPDATE fungerer med MVCC i Postgres). Ud over den dyre operation, VACUUM bliver nødt til at gøre mere arbejde senere for at rydde op i bordet. Meget ineffektiv.

Det er helt sikkert til SET den lokale tidszone for sessionen. Dette påvirker ikke samtidige operationer på nogen måde. BTW, SET SESSION er det samme som almindelig SET fordi SESSION er standard alligevel.

Hvis du vil være absolut sikker på, du kan begrænse indstillingen til den aktuelle transaktion med SET LOCAL . Jeg citerer manualen her

Sæt sammen:

BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;

Tjek:

SHOW timezone;



  1. Afslut MySQL-scriptet, hvis databasen findes

  2. Vælg de øverste rækker, indtil værdien i den specifikke kolonne er dukket op to gange

  3. Sådan forbinder du lokalt hostet MySQL-database med docker-containeren

  4. Fejl:Ugyldig PathExpression. Skal være et StateFieldPathExpression, der fejler ved valg af felt