PostgreSQL search_path changement ne fonctionne pas comme annoncé
Je suis en utilisant PostgreSQL 9.0.3 sur RedHat. La base de données contient deux schémas, public
et wh
. J'ai créé un nouveau rôle appelé django
. Je veux à cet utilisateur d'utiliser le wh
schéma en tant que par défaut.
Suivant le manuel, je l'ai fait:
ALTER USER django SET SEARCH_PATH TO wh, public;
Cela semble fonctionner:
SHOW SEARCH_PATH;
search_path
-------------
wh, public
Cependant, si je puis faire un \dt
, seules les tables du schéma public sont affichés. Dans le manuel, changer le chemin de recherche devrait avoir un effet immédiat, et que je devrais être en mesure d'accéder à wh
tables sans préfixe, mais ce n'est pas le cas. Connexion et à la déconnexion préserve les changements de search_path
mais ne montre pas de changement de comportement.
Ce qui me manque?
OriginalL'auteur talonsensei | 2011-09-13
Vous devez vous connecter pour publier un commentaire.
Cela pourrait résoudre votre problème:
(Ou de la SUBVENTION d'UTILISATION à un rôle qui a django (directe ou indirecte) des membres.)
(Ou d'ACCORDER à TOUS ... si c'est ce que vous voulez.)
Réglage de la
search_path
charge Postgres pour rechercher des objets dans la liste des schémas. Il n'accorde pas la permission de voir ce qui est là. Si "django" n'a pas les privilèges nécessaires,\dt
ne doit pas (et ne doit pas) montrer cette information.D'autre part, si vous avez déjà essayé, vous, en tant que super-utilisateur (comme par votre commentaire sur la suggestion précédente), alors cela pourrait ne pas l'être ...
Lors de l'interrogation d'une table, sans schéma de qualification tels que
SELECT id FROM mytable
, PG va direrelation "mytable" does not exists
, qui est un peu trompeuse, car vous savez qu'il n'existe, mais peut-être que vous n'avez tout simplement pas accès. Par conséquent, lorsque vous interrogez la table avec un qualifié du nom de schéma commeSELECT id FROM myschema.mytable;
vous donnera le message:permission denied for schema ..
qui indique clairement uneGRANT USAGE ON SCHEMA ..
déclaration est nécessaire. C'est juste une raison de plus pourquoi utiliser pleinement qualifié noms de schéma dans les requêtes est une bonne idée.Hey Erwin, Merci pour la solution, vous m'avez sauvé ! 🙂 et merci pour talonsensei pour initier la question ici 🙂
OriginalL'auteur Erwin Brandstetter
Je l'ai juste testé sur (seulement versions) 9.1 sur Windows 64 bits et il a travaillé comme spécifié.
Extrait de la
MODIFIER le RÔLE
man:(accent mine)
Si vous pouviez reproduire de manière fiable et ce pourrait concevoir un petit test, je crois que les développeurs veulent entendre parler de vous. Mais d'abord, vous devez vous assurer que vous faites les tests/reproduction sur la dernière version mineure (9.0.4) de la majeures de la version que vous utilisez (9.0).
Grâce Milen. Il est reproductible je crois. Je l'ai testé sur les deux 9.0.1 (Snow Leopard) et 9.0.3 (Redhat) installe.
OriginalL'auteur Milen A. Radev
Qui pourrait être une limitation de la
\dt
commande.Pour vérifier que le search_path fonctionne correctement, essayez d'exécuter
SELECT * FROM some_table
oùsome_table
est celui qui est situé dans le wh schéma.OriginalL'auteur a_horse_with_no_name
Pour PostgreSQL , si un utilisateur de se connecter à une base de données et recherchez des objets comme une table , d'abord
il regarde pour le schéma juste le même nom de nom d'utilisateur ,si ce n'est retrouvé ,il sera
recherchez schéma public, Dans votre cas, si vous vous connectez à la base de données via django utilisateur, il sera par défaut recherche le schéma de django , mais vous voulez le schéma actuel est wh, afin de rendre le nom de schéma et le rôle de nom de le même, et que la connexion à la base de données que le rôle sera de résoudre votre problème ,sans avoir à taper le préfixe, juste avoir un essai!
maintenant, quel est votre nom d'utilisateur et le nom du schéma ? si la base de données n'est pas une prod db, vous pouvez faire les deux le même nom. Et remarquez également la table du propriétaire.
OriginalL'auteur francs
Pour moi le problème était que j'essayais de définir le chemin de recherche dans pgAdmin. Pour une raison quelconque, il n'était pas d'appliquer les modifications à la search_path. (Elle a gardé le réglage des paramètres sur la base de données?)
Je me suis connecté via psql et a couru exactement les mêmes commandes et cela a fonctionné. Peut-être que j'ai fait quelque chose de mal, mais cela peut aider les autres si ils sont en train de faire quelque chose de mal aussi 🙂
OriginalL'auteur smithygreg