понедельник, 3 февраля 2014 г.

Макросы в pgAdmin. Доступ к таблицам не-public схемы и получение наименований таблиц в схеме

1.   Часто при написании sql-кода для Postgresql в запросах приходится обращаться к таблицам, находящимся в разных схемах БД.  При этом  в окне редактора Query  надоедает  к названию таблицы добавлять наименование схемы, например, как schema_name.table_name. Если для таблиц, расположенных в public, схему можно не указывать, то для таблиц не из public, это необходимо. Чтобы уменьшить трудоемкость написания такого кода существует переменная search_path.

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

Более не нужно писать длинное schema_name.table_name, достаточно в sql-скрипте выполнить команду:

SET search_path TO PUBLIC,
                   gateway,
                   calc_import;



и поиск таблицы будет последовательно производиться в  схемах public, gateway, calc_import.
Соответственно при написании и отладке sql-кода для указания дополнительной схемы, в которой находятся нужные таблицы, я использую макрос PgAdmin:

SET search_path TO PUBLIC,$SELECTION$;

где в качестве  $SELECTION$ выступает название схемы. Как создать макрос в PgAdmin и как им пользоваться можно прочесть здесь.

2.       PgAdmin является самой стабильно работающей GUI sql-tool  для  Postgresql, обладающей большим функционалом. Однако серьезным упущением в этой программе является отсутствие автодополнения при написании запросов. Часто нужно посмотреть точное имя таблицы, которую собираешься использовать в запросе. Новички, как правило начинают открывать браузер объектов в интерфейсе программы - это долго и неудобно. Гораздо быстрее, по-моему - сделать запрос  с получением списка всех таблиц нужно схемы, отсортированного в алфавитном порядке. Для этого я и использую макрос

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
  AND table_schema ILIKE ('%' || trim('$SELECTION$') || '%')
ORDER BY TABLE_NAME


Соответственно выделяю наименование схемы, запускаю макрос, а потом в окне полученных результатов копирую точное название нужной таблицы. 


Каталог блогов Blogolist