PostgreSQLLa base de données la plus sophistiquée au monde.

18.12. Compatibilité de version et de plateforme

18.12.1. Versions précédentes de PostgreSQL

add_missing_from (boolean)

Lorsque ce paramètre est activé (on), les tables référencées par une requête sont automatiquement ajoutées à la clause FROM, si elles n'y sont pas déjà présentes. Ce comportement, incompatible avec le standard SQL, est très décrié car il masque les erreurs (comme de faire référence à une table à la place de son alias). Désactivé par défaut (off), ce paramètre peut être activé pour des raisons de compatibilité avec les versions antérieures à PostgreSQL™ 8.1, pour lesquelles ce comportement était activé par défaut.

Même lorsque cette variable est activée, un message d'avertissement est émis pour chaque entrée FROM implicite référencée par une requête. Les utilisateurs sont encouragés à mettre à jour leurs applications pour qu'elles ne s'appuient pas sur ce comportement. Il suffit pour cela d'ajouter toutes les tables référencées par une requête dans la clause FROM de cette requête (ou dans sa clause USING dans le cas d'un DELETE).

array_nulls (boolean)

Contrôle si l'analyseur de saisie de tableau reconnaît NULL non-encadré par des guillemets comme élément de tableaux NULL. Activé par défaut (on), il autorise la saisie de valeurs NULL dans un tableau. Néanmoins, les versions de PostgreSQL™ antérieures à la 8.2 ne supportent pas les valeurs NULL dans les tableaux. De ce fait, ces versions traitent NULL comme une chaîne dont le contenu est « NULL ». Pour une compatibilité ascendante avec les applications nécessitant l'ancien comportement, ce paramètre peut être désactivé (off).

Il est possible de créer des valeurs de tableau contenant des valeurs NULL même quand cette variable est à off.

backslash_quote (string)

Contrôle si un guillemet simple peut être représenté par un \' dans une chaîne. Il est préférable, et conforme au standard SQL, de représenter un guillemet simple en le doublant ('') mais, historiquement, PostgreSQL™ a aussi accepté \'. Néanmoins, l'utilisation de \' présente des problèmes de sécurité car certains encodages client contiennent des caractères multi-octets dans lesquels le dernier octet est l'équivalent ASCII numérique d'un \. Si le code côté client ne fait pas un échappement correct, alors une attaque par injection SQL est possible. Ce risque peut être évité en s'assurant que le serveur rejette les requêtes dans lesquelles apparaît un guillemet échappé avec un antislash. Les valeurs autorisées de backslash_quote sont on (autorise \' en permanence), off (le rejette en permanence) et safe_encoding (ne l'autorise que si l'encodage client n'autorise pas l'ASCII \ dans un caractère multioctet). safe_encoding est le paramétrage par défaut.

Dans une chaîne littérale conforme au standard, \ ne signifie que \. Ce paramètre affecte la gestion des chaînes non conformes, incluant la syntaxe de chaînes d'échappement (E'...').

default_with_oids (boolean)

Contrôle si les commandes CREATE TABLE et CREATE TABLE AS incluent une colonne OID dans les tables nouvellement créées, lorsque ni WITH OIDS ni WITHOUT OIDS ne sont précisées. Ce paramètre détermine également si les OID sont inclus dans les tables créées par SELECT INTO. Dans PostgreSQL™ 8.1, default_with_oids est désactivée (off) par défaut, contrairement aux versions précédentes.

L'utilisation d'OID dans les tables utilisateur est considérée comme obsolète. Il est donc préférable pour la plupart des installations de laisser ce paramètre désactivé. Les applications qui requièrent des OID pour une table particulière doivent préciser WITH OIDS lors de la création de la table. Cette variable peut être activée pour des raisons de compatibilité avec les anciennes applications qui ne suivent pas ce comportement.

escape_string_warning (boolean)

S'il est activé (on), un message d'avertissement est affiché lorsqu'un antislash (\) apparaît dans une chaîne littérale ordinaire (syntaxe '...') et que standard_conforming_strings est désactivé. Il est activé par défaut (on).

Les applications qui souhaitent utiliser l'antislash comme échappement doivent être modifiées pour utiliser la syntaxe de chaîne d'échappement (E'...') car le comportement par défaut des chaînes ordinaires changera dans une prochaine version pour des raisons de compatibilité avec le standard SQL. Cette variable peut être activée pour aider à la détection des applications non conformes.

regex_flavor (string)

La « flaveur » des expressions rationnelles peut être configurée à advanced (avancée), extended (étendue) ou basic (basique). La valeur par défaut est advanced. La configuration extended peut être utile pour une compatibilité ascendante avec les versions antérieures à PostgreSQL™ 7.4. Voir Section 9.7.3.1, « Détails des expressions rationnelles » pour plus de détails.

sql_inheritance (boolean)

Ce paramètre contrôle si les références de table doivent inclure les tables filles. La valeur par défaut est on, signifiant que les tables filles sont incluses (et de ce fait, un suffixe * est supposé par défaut. Si ce paramètre est désactivé (à off), les tables filles ne sont pas inclus (et de ce fait, le préfixe ONLY est ajouté). Le standard SQL requiert que les tables filles soient inclues, donc le paramètrages off n'est pas conforme au standard. Cependant, il est fourni par compatibilité avec les versions PostgreSQL™ antérieures à la 7.1. Voir Section 5.8, « L'héritage » pour plus d'informations.

Désactiver sql_inheritance n'est pas conseillé car le comportement induis par cette configuration porte à faire beaucoup d'erreurs. Ceci n'est pas constaté lorsque ce paramètre est activé comme le demande le standard SQL. Les discussions sur l'héritage dans ce manuel supposent généralement que ce paramètre est configuré à on.

standard_conforming_strings (boolean)

Contrôle si les chaînes ordinaires ('...') traitent les antislashs littéralement, comme cela est indiqué dans le standard SQL. Désactivé par défaut (off), ce paramètre ramène PostgreSQL™ à son comportement historique pour le traitement des antislashs comme caractères d'échappement. La valeur par défaut sera passée à on dans une prochaine version pour améliorer la compatibilité avec le standard. Les applications peuvent vérifier ce paramètre pour déterminer la façon dont elles doivent traiter les chaînes littérales. La présence de ce paramètre indique aussi que la syntaxe de chaîne d'échappement (E'...') est supportée. La syntaxe de chaîne d'échappement doit être utilisée pour les applications traitant les antislashs comme des caractères d'échappement.

synchronize_seqscans (boolean)

Cette variable permet la synchronisation des parcours séquentiels de grosses tables pour que les parcours concurrents lisent le même bloc à peu près au même moment, et donc partagent la charge d'entrées/sorties. Quand ce paramètre est activé, un parcours peut commencer au milieu de la table, aller jusqu'à la fin, puis « revenir au début » pour récupérer toutes les lignes, ce qui permet de le synchroniser avec l'activité de parcours déjà entamés. Il peut en résulter des modifications non prévisibles dans l'ordre des lignes renvoyées par les requêtes qui n'ont pas de clause ORDER BY. Désactiver ce paramètre assure un comportement identique aux versions précédant la 8.3 pour lesquelles un parcours séquentiel commence toujours au début de la table. Activé par défaut (on).

18.12.2. Compatibilité entre la plateforme et le client

transform_null_equals (boolean)

Lorsque ce paramètre est activé (on), les expressions de la forme expr = NULL (ou NULL = expr) sont traitées comme expr IS NULL, c'est-à-dire qu'elles renvoient vrai si expr s'évalue à la valeur NULL, et faux sinon. Le bon comportement, compatible avec le standard SQL, de expr = NULL est de toujours renvoyer NULL (inconnu). De ce fait, ce paramètre est désactivé par défaut.

Toutefois, les formulaires filtrés dans Microsoft Access™ engendrent des requêtes qui utilisent expr = NULL pour tester les valeurs NULL. Il peut donc être souhaitable, lorsque cette intarface est utilisée pour accéder à une base de données, d'activer ce paramètre. Comme les expressions de la forme expr = NULL renvoient toujours la valeur NULL (en utilisant la bonne interprétation), elles ne sont pas très utiles et n'apparaissent pas souvent dans les applications normales. De ce fait, ce paramètre a peu d'utilité en pratique. Mais la sémantique des expressions impliquant des valeurs NULL est souvent source de confusion pour les nouveaux utilisateurs. C'est pourquoi ce paramètre n'est pas activé par défaut.

Ce paramètre n'affecte que la forme exacte = NULL, pas les autres opérateurs de comparaison ou expressions équivalentes en terme de calcul à des expressions qui impliquent l'opérateur égal (tels que IN). De ce fait, ce paramètre ne doit pas être considéré comme un correctif général à une mauvaise programmation.

De plus amples informations sont disponibles dans la Section 9.2, « Opérateurs de comparaison ».