Documentation PostgreSQL 14.22 » Référence » Commandes SQL » SET

Précédent | Niveau supérieur | Suivant
SELECT INTO | Sommaire | SET CONSTRAINTS

## SET

SET — change un paramètre d'exécution

## Synopsis

    SET [ SESSION | LOCAL ] paramètre_configuration { TO | = } { valeur | 'valeur' | DEFAULT }
    SET [ SESSION | LOCAL ] TIME ZONE { valeur | 'valeur' | LOCAL | DEFAULT }

## Description

La commande `SET` permet de modifier les paramètres d'exécution. Un grand nombre de paramètres d'exécution, listés dans Chapitre 20, peuvent être modifiés à la volée avec la commande `SET`. `SET` ne modifie que les paramètres utilisés par la session courante.

Certains paramètres ne peuvent être modifiés que par le super-utilisateur, d'autres ne peuvent plus être changés après le démarrage du serveur ou de la session.

Si `SET` ou `SET SESSION` sont utilisés dans une transaction abandonnée par la suite, les effets de la commande `SET` disparaissent dès l'annulation de la transaction. Lorsque la transaction englobant la commande est validée, les effets de la commande persistent jusqu'à la fin de la session, à moins qu'ils ne soient annulés par une autre commande `SET`.

Les effets de `SET LOCAL` ne durent que jusqu'à la fin de la transaction en cours, qu'elle soit validée ou non. Dans le cas particulier d'une commande `SET` suivie par `SET LOCAL` dans une même transaction, la valeur de `SET LOCAL` est utilisée jusqu'à la fin de la transaction, et celle de `SET` prend effet ensuite (si la transaction est validée).

Les effets de `SET` et `SET LOCAL` sont aussi annulés par le retour à un point de sauvegarde précédant la commande.

Si `SET LOCAL` est utilisé à l'intérieur d'une fonction qui comprend l'option `SET` pour la même variable (voir CREATE FUNCTION), les effets de la commande `SET LOCAL` disparaîtront à la sortie de la fonction ; en fait, la valeur disponible lors de l'appel de la fonction est restaurée de toute façon. Ceci permet l'utilisation de `SET LOCAL` pour des modifications dynamiques et répétées d'un paramètre à l'intérieur d'une fonction, avec l'intérêt d'utiliser l'option `SET` pour sauvegarder et restaurer la valeur de l'appelant. Néanmoins, une commande `SET` standard surcharge toute option `SET` de la fonction ; son effet persistera sauf en cas d'annulation.

### Note

De PostgreSQL version 8.0 à 8.2, les effets de `SET LOCAL` sont annulés suite au relachement d'un point de sauvegarde précédent, ou par une sortie avec succès d'un bloc d'exception PL/pgSQL. Ce comportement a été modifié car il n'était pas du tout intuitif.

## Paramètres

`SESSION`

  Indique que la commande prend effet pour la session courante. C'est la valeur par défaut lorsque `SESSION` et `LOCAL` sont omis.

`LOCAL`

  Indique que la commande n'est effective que pour la transaction courante. Utiliser cette option en dehors d'une transaction émet un avertissement et n'a aucun autre effet. no effect.

`paramètre_configuration`

  Nom d'un paramètre ajustable pendant l'exécution. La liste des paramètres disponibles est documentée dans Chapitre 20 et ci-dessous.

`valeur`

  Nouvelle valeur du paramètre. Les valeurs peuvent être indiquées sous forme de constantes de chaîne, d'identifiants, de nombres ou de listes de ceux-ci, séparées par des virgules, de façon approprié pour ce paramètre. `DEFAULT` peut être utilisé pour repositionner le paramètre à sa valeur par défaut (c'est-à-dire quelque soit la valeur qu'il aurait eu si aucun `SET` n'avait été exécuté lors de cette session).

En plus des paramètres de configuration documentés dans Chapitre 20, il y en a quelques autres qui ne peuvent être initialisés qu'avec la commande `SET` ou ont une syntaxe spéciale.

`SCHEMA`

  `SET SCHEMA '`valeur`'` est un alias pour `SET search_path TO `valeur``. Seul un schéma peut être précisé en utilisant cette syntaxe.

`NAMES`

  `SET NAMES `valeur`` est un équivalent de `SET client_encoding TO `valeur``.

`SEED`

  Précise la valeur interne du générateur de nombres aléatoires (la fonction `random`). Les valeurs autorisées sont des nombres à virgule flottante entre -1 et 1.

  Le générateur de nombres aléatoires peut aussi être initialisé en appelant la fonction `setseed` :

      SELECT setseed(valeur);

`TIME ZONE`

  `SET TIME ZONE '`valeur`'` est équivalent à `SET timezone TO '`valeur`'`. La syntaxe `SET TIME ZONE` permet d'utiliser une syntaxe spéciale pour indiquer le fuseau horaire. Quelques exemples de valeurs valides :

  `'America/Los_Angeles'`

    Le fuseau horaire de Berkeley, Californie.

  `'Europe/Rome'`

    Le fuseau horaire de l'Italie.

  `-7`

    Le fuseau horaire situé 7 heures à l'ouest de l'UTC (équivalent à PDT). Les valeurs positives sont à l'est de l'UTC.

  `INTERVAL '-08:00' HOUR TO MINUTE`

    Le fuseau horaire situé 8 heures à l'ouest de l'UTC (équivalent à PST).

  `LOCAL`
  `DEFAULT`

    Utilise le fuseau horaire local (c'est-à-dire la valeur `timezone` par défaut du serveur).

  Les réglages du fuseau horaire fournis en nombre ou intervalles sont convertis en interne en syntaxe de fuseau horaire POSIX. Par exemple, après avoir effectué `SET TIME ZONE -7`, `SHOW TIME ZONE` afficherait `<-07>+07`.

  Les abréviations des fuseaux horaires ne sont pas supportées par la commande `SET` ; voir Section 8.5.3 pour de plus amples informations sur les fuseaux horaires.

## Notes

La fonction `set_config` propose des fonctionnalités équivalentes. Voir Section 9.27.1. De plus, il est possible de mettre à jour (via UPDATE) la vue système `pg_settings` pour réaliser l'équivalent de `SET`.

## Exemples

Mettre à jour le chemin de recherche :

    SET search_path TO my_schema, public;

Utiliser le style de date traditionnel POSTGRES avec comme convention de saisie « les jours avant les mois » :

    SET datestyle TO postgres, dmy;

Utiliser le fuseau horaire de Berkeley, Californie :

    SET TIME ZONE 'America/Los_Angeles';

Utiliser le fuseau horaire de l'Italie :

    SET TIME ZONE 'Europe/Rome';

## Compatibilité

`SET TIME ZONE` étend la syntaxe définie dans le standard SQL. Le standard ne permet que des fuseaux horaires numériques alors que PostgreSQL est plus souple dans les syntaxes acceptées. Toutes les autres fonctionnalités de `SET` sont des extensions de PostgreSQL.

## Voir aussi

RESET, SHOW