C'est beaucoup plus efficace de définir le fuseau horaire pour votre session d'importation que de mettre à jour les valeurs ultérieurement.
J'ai l'impression que vous considérez le fuseau horaire comme un paramètre qui s'applique à des valeurs autrement inchangées dans les tableaux. Mais ce n'est pas du tout comme ça. Considérez-le comme un modificateur d'entrée / sortie. timestamp
réel les valeurs (avec ou sans fuseau horaire) sont toujours stockés sous forme d'horodatages UTC en interne (nombre de secondes depuis '2000-01-01 00:00'
). Beaucoup plus de détails :
La UPDATE
dans votre deuxième exemple double la taille de la table, car chaque ligne est invalidée et une nouvelle version ajoutée (c'est ainsi que UPDATE
fonctionne avec MVCC
dans Postgres). En plus de l'opération coûteuse, VACUUM
devra faire plus de travail plus tard pour nettoyer le ballonnement de la table. Très inefficace.
C'est parfaitement sûr à SET
le fuseau horaire local de la session. Cela n'affecte en rien les opérations simultanées. BTW, SET SESSION
est le même que le simple SET
car SESSION
est de toute façon la valeur par défaut.
Si vous voulez être absolument bien sûr, vous pouvez limiter le paramètre à la transaction en cours avec SET LOCAL
. Je cite le manuel ici
Réunissez :
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Vérifier :
SHOW timezone;