Spanner fournit des fonctions date et timestamp dans GoogleSQL et Cloud SQL pour PostgreSQL. Certaines fonctions, comme TIMESTAMP
, dépendent du fuseau horaire et acceptent un paramètre de fuseau horaire facultatif. Si aucun paramètre de fuseau horaire n'est fourni dans une fonction, les bases de données Spanner utilisent par défaut le fuseau horaire America/Los_Angeles
.
Spanner vous permet de modifier le fuseau horaire par défaut d'une base de données pour personnaliser ce comportement.
Limites
- Vous ne pouvez modifier le fuseau horaire que des bases de données vides, sans tables.
- Si vous fournissez un paramètre de fuseau horaire dans une instruction, il remplace le fuseau horaire par défaut de la base de données pour cette instruction.
- Tous les codes temporels des API REST et RPC doivent utiliser le format UTC et se terminer par un
Z
en majuscule. - Les codes temporels dans les résultats de requête sont toujours présentés en temps UTC, avec
Z
ajouté. Les conversions de fuseau horaire ne sont pas effectuées.
Rôles requis
Pour obtenir les autorisations nécessaires pour définir le fuseau horaire par défaut d'une base de données, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de bases de données Cloud Spanner (roles/spanner.databaseAdmin
) sur la base de données.
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Ce rôle prédéfini contient les autorisations requises pour définir le fuseau horaire par défaut d'une base de données. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour définir le fuseau horaire par défaut d'une base de données :
-
Définissez le fuseau horaire par défaut d'une base de données :
spanner.databases.getDdl, spanner.databases.updateDdl
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Définir le fuseau horaire par défaut
Pour modifier le fuseau horaire par défaut de votre base de données, exécutez l'instruction suivante :
GoogleSQL
Utilisez l'instruction ALTER DATABASE
:
ALTER DATABASE DATABASE-NAME SET OPTIONS (default_time_zone = 'TIME-ZONE-NAME');
Remplacez les éléments suivants :
- DATABASE-NAME : nom de la base de données. Exemple :
my-database
. - TIME-ZONE-NAME : nom du fuseau horaire à définir par défaut pour la base de données. Doit être une entrée valide de la base de données des fuseaux horaires IANA. Exemple :
Etc/UTC
.
PostgreSQL
Utilisez l'instruction ALTER DATABASE
:
ALTER DATABASE DATABASE-NAME SET spanner.default_time_zone = 'TIME-ZONE-NAME';
Remplacez les éléments suivants :
- DATABASE-NAME : nom de la base de données. Exemple :
my-database
. - TIME-ZONE-NAME : nom du fuseau horaire à définir par défaut pour la base de données. Doit être une entrée valide de la base de données des fuseaux horaires IANA. Exemple :
Etc/UTC
.
Exemples
Les exemples de requêtes suivants montrent comment utiliser l'option de fuseau horaire par défaut.
Fuseau horaire par défaut non personnalisé
Si l'option default_time_zone n'est pas explicitement définie dans le schéma de base de données, la valeur de default_time_zone est nulle et Spanner utilise America/Los_Angeles
comme fuseau horaire par défaut. America/Los_Angeles
a un décalage de UTC-8 pour les codes temporels dans les exemples suivants.
Déclaration :
SELECT TIMESTAMP("2072-12-25 15:30:00") AS timestamp_str;
Résultat :
/*----------------------*
| timestamp_str |
+----------------------+
| 2072-12-25T23:30:00Z |
*----------------------*/
Déclaration :
SELECT EXTRACT(HOUR FROM TIMESTAMP("2072-12-25 15:30:00")) AS hour;
Résultat :
/*------*
| hour |
+------+
| 23 |
*------*/
Déclaration :
SELECT TIMESTAMP_TRUNC(TIMESTAMP "2072-12-25 15:30:00", DAY) AS date_str;
Résultat :
/*----------------------*
| date_str |
+----------------------+
| 2072-12-25T08:00:00Z |
*----------------------*/
Option de fuseau horaire par défaut définie sur Etc/UTC
Les exemples suivants montrent comment les mêmes instructions se comportent lorsque l'option de fuseau horaire par défaut est définie sur Etc/UTC
.
Déclaration :
SELECT TIMESTAMP("2072-12-25 15:30:00") AS timestamp_str;
Résultat :
/*----------------------*
| timestamp_str |
+----------------------+
| 2072-12-25T15:30:00Z |
*----------------------*/
Déclaration :
SELECT EXTRACT(HOUR FROM TIMESTAMP("2072-12-25 15:30:00")) AS hour;
Résultat :
/*------*
| hour |
+------+
| 15 |
*------*/
Déclaration :
SELECT TIMESTAMP_TRUNC(TIMESTAMP "2072-12-25 15:30:00+00", DAY) AS date_str;
Résultat :
/*----------------------*
| date_str |
+----------------------+
| 2072-12-25T00:00:00Z |
*----------------------*/
Fuseau horaire par défaut remplacé par un paramètre de fonction
Lorsqu'une fonction ou un littéral de chaîne inclut un paramètre de fuseau horaire défini, le fuseau horaire par défaut de la base de données n'est pas appliqué.
Déclaration :
SELECT FORMAT_TIMESTAMP("%c", TIMESTAMP "2050-12-25 15:30:55+00", "Australia/Sydney")
AS formatted;
Résultat :
/*--------------------------*
| formatted |
+--------------------------+
| Mon Dec 26 02:30:55 2050 |
*--------------------------*/
Déclaration :
SELECT TIMESTAMP("2072-12-25 15:30:00+11:00") AS timestamp_str;
Résultat :
/*----------------------*
| timestamp_str |
+----------------------+
| 2072-12-25T04:30:00Z |
*----------------------*/