SET — change un paramètre d'exécution
SET [ SESSION | LOCAL ]paramètre_configuration
{ TO | = } {valeur
| 'valeur
' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE {valeur
| 'valeur
' | LOCAL | DEFAULT }
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 19, 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 superutilisateur, 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.
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.
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 19 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 19, 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 '
est
un alias pour valeur
'SET search_path TO
. Seul un schéma peut être
précisé en utilisant cette syntaxe.
valeur
NAMES
SET NAMES
est un équivalent de
valeur
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 '
est
équivalent à valeur
'SET timezone TO
'
. La syntaxe valeur
'SET
TIME ZONE
permet d'utiliser une syntaxe spéciale pour indiquer
le fuseau horaire. Quelques exemples de valeurs valides :
'PST8PDT'
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.
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
.
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 'PST8PDT';
Utiliser le fuseau horaire de l'Italie :
SET TIME ZONE 'Europe/Rome';
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.