Définir de manière permanente le chemin du schéma PostgreSQL

136

J'ai besoin de définir le chemin du schéma dans Postgres afin que je ne spécifie pas à chaque fois la table de points de schéma, par exemple schema2.table. Définissez 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 se rétablit par défaut.

Comment puis-je le rendre permanent?

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

Réponses:

168

(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 doubles.
  2. L'ordre dans lequel vous définissez les schémas par défaut est a, b, cimportant, car c'est également l'ordre dans lequel les schémas seront recherchés pour les tables. Donc, si vous avez le même nom de table dans plusieurs schémas parmi les valeurs par défaut, il n'y aura pas d'ambiguïté, le serveur utilisera toujours la table du premier schéma que vous avez spécifié pour votre search_path.
Milen A. Radev
la source
19
Il convient également de noter de ne PAS utiliser explicitement les guillemets autour de l'énumération a, b, c. Main-à-front pour les 15 dernières minutes ...
Jmoney38
4
@ Jmoney38 Ne pas utiliser de guillemets simples, mais des guillemets doubles sont obligatoires pour les noms de schéma non simples.
vitaly-t
136

Vous pouvez définir la valeur par défaut search_pathau 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 dans toutes vos bases de données, vous pouvez définir la valeur par défaut à l'échelle du système dans le fichier de configuration avec l' option search_path .

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" masquée nommée template1 , 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 l'utiliser CREATE DATABASE <database_name> TEMPLATE <template_name>pour créer vos bases de données.

Joshperry
la source
9
pour ceux qui se demandent à partir de la ligne de commande psql, vous pouvez lister les schémas par \ dn
BKSpurgeon
3
Vous devez déconnecter la session et vous reconnecter pour que les paramètres prennent effet.
isapir
oh vous bénisse. est venu à PG de SQL Server, donc c'est tout nouveau (et étrange) pour moi
Nate Anderson
24

Josh a raison mais il a omis une variante:

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

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

Chris Johnson
la source
très utile aussi. Merci
Alejandro Teixeira Muñoz