2009-07-29 7 views
0

Comment lisez-vous la ligne de code suivante? Le code provient de SO par John Saunders. (S'il vous plaît ajouter un lien vers si vous le trouvez)Pour comprendre une instruction dans Postgres

SET search_path TO so,"$user", public; 

Contexte

START TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE; 
CREATE SCHEMA SO 
SET search_path TO so,"$user", public;  /// here 
... 

Je lis la ligne comme «ton chemin choisi à votre schéma pour un public utilisateur donné ". Le public semble signifier que le PATH ou l'utilisateur est public. Je ne sais pas pourquoi nous avons besoin de quota l'utilisateur de la variable, puisque tout est en minuscules.

+0

Merci pour vos réponses! –

Répondre

2

La définition du chemin de recherche est extrêmement courante lorsque vous disposez d'une base de données avec suffisamment de tables qui ont été divisées en plusieurs schémas. Le chemin pour comprendre ce qu'il fait et est utilisé est de commencer par la documentation schema, qui couvre le rôle du schéma public dans les choses aussi.

La façon dont l'utilisateur $ est remplacé quand il apparaît dans cette voie est décrite dans la documentation pour search_path:

« Si l'un des éléments de la liste est l'utilisateur $ valeur spéciale , le schéma ayant le nom retourné par SESSION_USER est substitué, si est un tel schéma ".

De toute évidence, votre prochaine question est: qu'est-ce que SESSION_USER? Cela commence comme le nom d'utilisateur que vous connectez à la base de données, mais peut changer via des commandes comme SET SESSION AUTHORIZATION. L'idée est que cela peut vous aider à configurer un schéma pour chaque utilisateur, ce qui peut être un moyen utile de verrouiller la sécurité pour chaque utilisateur. J'ai seulement entendu parler de cela étant utilisé dans une base de données simple hébergeant un type d'environnement où chaque utilisateur obtient son propre rôle et son propre schéma mais pas sa propre base de données. Vous pouvez probablement laisser la partie "$ user" en dehors de cela et n'affectera rien, elle apparaîtra par défaut et la plupart ne savent pas que vous pouvez la supprimer si vous ne comptez pas sur elle.

$ L'utilisateur est entre guillements car il s'agit d'un reserved word dans la norme SQL. Vous pouvez nommer des choses en utilisant des mots réservés si vous le devez dans PostgreSQL, même si c'est une mauvaise idée, mais vous devez les mettre entre guillemets tout le temps pour que l'analyseur SQL ne les interprète pas mal. Cela peut vous mordre avec des erreurs bizarres si vous essayez d'utiliser un mot réservé comme nom d'une colonne ou d'une table.Certains que vous pourriez accidentellement essayer d'utiliser comme noms de colonnes en plus de "utilisateur", car ils correspondent à des choses du monde réel commun comprennent cas, défaut, fin, plein, gauche, nouveau, offset, l'ordre et les références.

2

Il définit l'ordre de recherche de schéma de la connexion de base de données en cours lorsqu'une instruction SQL est présentée sans notation de schéma explicite.

Dans ce cas, le moteur de recherche de la base de données recherche d'abord le schéma «so», puis un schéma du même nom que la connexion à la base de données actuelle, enfin un schéma public. Je suppose que les citations sont à cause du signe du dollar.

1

La documentation de PostgreSQL sur l'option search_path contient une bonne description de son objectif.

Ceci est probablement une commande rare car la valeur par défaut est presque toujours exactement ce que vous voulez. Je n'ai jamais eu besoin de l'utiliser dans le travail PostgreSQL que j'ai fait.

+0

Vous pourriez être intéressé par la réponse de Greg. Il explique bien search_path et ses applications. –

Questions connexes