158 votes

Définir de façon permanente le chemin du schéma de Postgresql

J'ai besoin de définir le chemin du schéma dans Postgres pour ne pas avoir à spécifier à chaque fois le schéma d'une table, par ex. schema2.table . Définir le chemin du schéma :

SET SCHEMA PATH a,b,c

ne semble fonctionner que pour une session de requête sur mac, après avoir fermé la fenêtre de requête, la variable de chemin d'accès se remet par défaut.

Comment puis-je le rendre permanent ?

1 votes

Je pense que c'est SET search_path TO a, b,c ; comme le dit la réponse et non SET SCHEMA PATH a,b,c ;

193voto

Milen A. Radev Points 20462

(Et si vous n'avez pas d'accès administrateur au serveur)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

Deux choses importantes à savoir :

  1. Lorsqu'un nom de schéma n'est pas simple, il doit être entouré de guillemets.
  2. L'ordre dans lequel vous définissez les schémas par défaut a, b, c est important, car c'est aussi l'ordre dans lequel les schémas seront recherchés pour les tables. Ainsi, si vous avez le même nom de table dans plus d'un schéma parmi les valeurs par défaut, il n'y aura aucune ambiguïté, le serveur utilisera toujours la table du premier schéma que vous avez spécifié pour votre search_path .

22 votes

Il faut également noter qu'il ne faut PAS utiliser de guillemets autour de l'énumération a,b,c. Main dans la main pendant les 15 dernières minutes...

4 votes

@Jmoney38 Ne pas utiliser de guillemets simples, mais des guillemets doubles sont nécessaires pour les noms de schémas non simples.

0 votes

Oui, ce sont identifiants et non des cordes.

151voto

joshperry Points 17727

Vous pouvez définir la valeur par défaut search_path au niveau de la base de données :

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

Ou au niveau de l'utilisateur ou du rôle :

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

Ou si vous avez un schéma par défaut commun à toutes vos bases de données, vous pouvez définir la valeur par défaut du système dans le fichier de configuration avec l'option chemin de recherche option.

Lorsqu'une base de données est créée, elle est créée par défaut à partir d'une base de données "modèle" cachée nommée Modèle 1 vous pouvez modifier cette base de données pour spécifier un nouveau chemin de recherche par défaut pour toutes les bases de données créées à l'avenir. Vous pouvez également créer une autre base de données modèle et utiliser CREATE DATABASE <database_name> TEMPLATE <template_name> pour créer vos bases de données.

10 votes

Pour ceux qui se posent la question, à partir de la ligne de commande psql, vous pouvez lister les schémas par \dn

4 votes

Il faut déconnecter la session et se reconnecter pour que les paramètres prennent effet.

0 votes

Je suis passé de SQL Server à PG, donc tout ceci est nouveau (et étrange) pour moi.

34voto

Chris Johnson Points 2887

Josh a raison, mais il a omis une variante :

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

Définir le chemin de recherche pour l'utilisateur, dans une base de données particulière.

1voto

leonbloy Points 27119

Avez-vous essayé le chemin de recherche dans le fichier de configuration ?

-1voto

user215626 Points 11

Légère correction à la réponse de Joshperry, pour définir le chemin de recherche par défaut de la base de données, faites-le sans les guillemets :

ALTER DATABASE database_name SET search_path TO schema1,schema2;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X