Чтобы понять утверждение в Postgres - PullRequest
0 голосов
/ 30 июля 2009

Как прочитать следующую строку кода? Код от SO Джона Сондерса. (Пожалуйста, добавьте ссылку на него, если найдете)

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

Context

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

Я прочитал строку как " публично установил выбранную вами PATH для вашей схемы для данного пользователя " Публичный, кажется, означает, что PATH или пользователь является публичным. Я не уверен, зачем нам нужно указывать переменную user, поскольку все строчные.

Ответы [ 3 ]

2 голосов
/ 31 июля 2009

Установка search_path чрезвычайно распространена, когда у вас есть база данных с достаточным количеством таблиц, чтобы они были разбиты на несколько схем. Путь к пониманию того, что он делает и для чего используется, - начать с документации schema , которая также охватывает роль публичной схемы в вещах.

Способ замены $ user, когда он появляется по этому пути, описан в документации для search_path :

"Если одним из пунктов списка является специальное значение $ user, тогда схема возвращая имя SESSION_USER заменяется, если есть такая схема ".

Очевидно, ваш следующий вопрос - тогда что такое SESSION_USER? Это начинается с имени пользователя, с которым вы подключаетесь к базе данных, но может изменяться с помощью таких команд, как SET SESSION AUTHORIZATION . Идея состоит в том, что он может помочь вам настроить схему для каждого пользователя, что может быть полезным способом блокировки безопасности для каждого пользователя. Я только слышал о том, чтобы его использовали в простой среде размещения баз данных, где каждый пользователь получает свою собственную роль и схему, но не свою собственную базу данных. Вы, вероятно, можете оставить часть «$ user» и не влиять ни на что, она просто отображается по умолчанию, и большинство не знает, что вы можете удалить ее, если не полагаетесь на нее.

$ user указан в кавычках, поскольку это зарезервированное слово в стандарте SQL. Вы можете называть вещи, используя зарезервированные слова, если это необходимо в PostgreSQL, даже если это плохая идея, но вы должны постоянно помещать их в кавычки, чтобы синтаксический анализатор SQL не интерпретировал их неправильно. Это может привести к странным ошибкам, если вы попытаетесь использовать зарезервированное слово в качестве имени столбца или таблицы. Некоторые из них вы можете случайно попытаться использовать в качестве имен столбцов в дополнение к «пользователю», потому что они сопоставляются с общими фактическими вещами, такими как case, default, end, full, left, new, offset, order и ссылки.

2 голосов
/ 30 июля 2009

Устанавливает текущий порядок соединения схемы с базой данных при представлении оператора sql без явного обозначения схемы.

В этом случае механизм запросов к базе данных сначала будет искать схему 'so', затем схему с тем же именем, что и у текущего соединения с базой данных, и, наконец, схему с именем public. Я предполагаю, что котировки из-за знака доллара.

1 голос
/ 30 июля 2009

Документация PostgreSQL по опции search_path содержит хорошее описание ее назначения.

Это, вероятно, редкая команда, потому что по умолчанию это почти всегда именно то, что вы хотите. Мне никогда не приходилось использовать его в любой работе над PostgreSQL, которую я делал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...