Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Mise à jour automatique de la colonne d'horodatage

Dernière mise à jour :Aug 08, 2026

Contrairement à MySQL qui propose l'instruction ON UPDATE CURRENT_TIMESTAMP, PostgreSQL ne met pas à jour nativement une colonne d'horodatage lors de la modification d'une ligne. ApsaraDB RDS for PostgreSQL comble cette lacune grâce au paramètre on_update_set_default : appliquez-le à n'importe quelle colonne temporelle et l'expression DEFAULT de la colonne sera réévaluée à chaque instruction UPDATE. L'horodatage reste ainsi à jour sans nécessiter de déclencheur.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une instance RDS for PostgreSQL exécutant PostgreSQL 15 ou une version ultérieure

  • Une version mineure du moteur 20241230 ou une version ultérieure

Pour mettre à niveau la version mineure du moteur, consultez la rubrique Mettre à jour la version mineure du moteur .

Fonctionnement

Une table classique contient généralement deux colonnes temporelles aux sémantiques distinctes :

  • create_time : définie une seule fois lors de l'opération INSERT et jamais modifiée par la suite

  • update_time : doit être actualisée automatiquement à chaque opération UPDATE

Le paramètre on_update_set_default fonctionne en réévaluant l'expression DEFAULT de la colonne lors de chaque opération UPDATE. Ce paramètre prend en charge les types de données de colonne suivants : TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ et INTERVAL.

Activer la mise à jour automatique sur une colonne temporelle

Exécutez l'instruction suivante pour activer la mise à jour automatique d'une colonne :

ALTER TABLE <table> ALTER COLUMN <column> SET (on_update_set_default=true);

Remplacez <table> par le nom de votre table et <column> par le nom de la colonne temporelle cible.

Exemple

L'exemple ci-dessous illustre comment on_update_set_default maintient la colonne update_time à jour, tandis que la colonne create_time conserve sa valeur d'insertion initiale.

Étape 1 : Créez une table et insérez une ligne.

CREATE TABLE test (id INT, create_time TIMESTAMPTZ DEFAULT now(), update_time TIMESTAMPTZ DEFAULT now());

INSERT INTO test VALUES(1);

SELECT * FROM test;

Résultat attendu :

 id |          create_time          |          update_time
----+-------------------------------+-------------------------------
  1 | 2025-01-09 16:07:48.481879+08 | 2025-01-09 16:07:48.481879+08

Étape 2 : Mettez à jour la ligne sans avoir activé la mise à jour automatique.

UPDATE test SET id=2;

SELECT * FROM test;

Résultat attendu :

 id |          create_time          |          update_time
----+-------------------------------+-------------------------------
  2 | 2025-01-09 16:07:48.481879+08 | 2025-01-09 16:07:48.481879+08

La colonne update_time reste inchangée car le paramètre on_update_set_default n'est pas encore activé.

Étape 3 : Activez la mise à jour automatique sur la colonne update_time.

ALTER TABLE test ALTER COLUMN update_time SET (on_update_set_default=true);

Vérifiez que le paramètre est bien défini :

SELECT attoptions FROM pg_attribute WHERE attname='update_time';

Résultat attendu :

       attoptions
------------------------------
 {on_update_set_default=true}

Étape 4 : Mettez à nouveau à jour la ligne et confirmez que update_time est actualisé.

UPDATE test SET id=3;

SELECT * FROM test;

Résultat attendu :

 id |          create_time          |          update_time
----+-------------------------------+-------------------------------
  3 | 2025-01-09 16:07:48.481879+08 | 2025-01-09 16:08:39.601701+08

La colonne update_time s'actualise désormais automatiquement à chaque instruction UPDATE, tandis que la colonne create_time conserve sa valeur d'insertion initiale.