sql >> Database >  >> RDS >> PostgreSQL

Tijdzonewaarde van gegevens wijzigen

Het is veel efficiënter om de tijdzone voor uw importsessie in te stellen dan om de waarden later bij te werken.

Ik krijg de indruk dat je de tijdzone ziet als een instelling die van toepassing is op overigens ongewijzigde waarden in de tabellen. Maar zo is het helemaal niet. Zie het als een input / output-modifier. Werkelijke timestamp waarden (met of zonder tijdzone) zijn altijd intern opgeslagen als UTC-tijdstempels (aantal seconden sinds '2000-01-01 00:00' ). Veel meer details:

De UPDATE in uw tweede voorbeeld verdubbelt de grootte van de tabel, omdat elke afzonderlijke rij ongeldig wordt gemaakt en een nieuwe versie wordt toegevoegd (zo UPDATE werkt met MVCC in Postgres). Naast de dure operatie, VACUUM zal later meer werk moeten doen om de tafelzwelling op te ruimen. Zeer inefficiënt.

Het is volkomen veilig naar SET de lokale tijdzone voor de sessie. Dit heeft op geen enkele manier invloed op gelijktijdige bewerkingen. BTW, SET SESSION is hetzelfde als gewoon SET omdat SESSION is sowieso de standaard.

Als je absoluut . wilt zijn natuurlijk, je kunt de instelling beperken tot de huidige transactie met SET LOCAL . Ik citeer de handleiding hier

Samengevoegd:

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

Controleer:

SHOW timezone;



  1. Zoekfilter implementeren voor alle kolommen

  2. Selecteer een willekeurige steekproef van resultaten uit een queryresultaat

  3. Hoe voeg ik binaire gegevens in een DB in met Laravel?

  4. Zijn deze twee vragen hetzelfde - GROUP BY vs. DISTINCT?