PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Quand/comment les fonctions d'expression de valeur par défaut sont-elles liées à search_path ?

Les valeurs par défaut sont analysées au moment de la création (liaison anticipée !). Ce que vous voyez dans psql, pgAdmin ou d'autres clients est une représentation textuelle mais, en fait, l'OID de la fonction now() au moment de la création de la colonne, la valeur par défaut est stockée dans le catalogue système pg_attrdef . Je cite :

adbin   pg_node_tree  The internal representation of the column default value
adsrc   text          A human-readable representation of the default value

Lorsque vous modifiez le search_path , qui fait que Postgres affiche le nom de la fonction qualifiée par le schéma, car elle ne serait plus résolue correctement avec le search_path actuel .

Le vidage et la restauration ne sont pas concernés par votre search_path personnalisé paramètre. Ils l'ont défini explicitement. Ce que vous voyez n'est donc pas lié au cycle de vidage/restauration.

Remplacer les fonctions intégrées

Placer public avant pg_catalog dans le search_path est un jeu de hasard . Les utilisateurs défavorisés (y compris vous-même) sont souvent autorisés à y écrire et à créer des fonctions qui peuvent par inadvertance annuler les fonctions du système - avec un résultat arbitraire (ou malveillant).

Vous souhaitez un schéma dédié avec accès restreint pour remplacer les fonctions intégrées. Utilisez quelque chose comme ceci à la place :

SET search_path = override, pg_catalog, public;

Détails dans ce réponse connexe sur dba.SE .