PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Modification de la valeur du fuseau horaire des données

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;