É 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;