PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Alterando o valor do fuso horário dos dados


É muito mais eficiente definir o fuso horário para sua sessão de importação do que atualizar os valores posteriormente.

Tenho a impressão de que você pensa no fuso horário como uma configuração que se aplica a valores inalterados nas tabelas. Mas não é nada disso. Pense nisso como um modificador de entrada/saída. timestamp real os valores (com ou sem fuso horário) são sempre armazenados internamente como timestamps UTC (número de segundos desde '2000-01-01 00:00' ). Muito mais detalhes:

A UPDATE em seu segundo exemplo dobra o tamanho da tabela, pois cada linha é invalidada e uma nova versão é adicionada (é assim que UPDATE funciona com MVCC em Postgres). Além da operação cara, VACUUM terá que fazer mais trabalho depois para limpar o inchaço da mesa. Muito ineficiente.

É perfeitamente seguro para SET o fuso horário local para a sessão. Isso não afeta as operações simultâneas de forma alguma. BTW, SET SESSION é o mesmo que SET simples porque SESSION é o padrão de qualquer maneira.

Se você quer ser absolutamente claro, você pode limitar a configuração à transação atual com SET LOCAL . Cito o manual aqui

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

Verificar:
SHOW timezone;