Статья основана на двадцать первом видео из 31 темы курса SQL 2.0 — PL/pgSQL в PostgreSQL от Аристова Евгения, который является логическим продолжением курса SQL c 0. Ссылки на видео на платформах RUTUBE и VK video.
В данной статье подробно разбираются использование параметра search_path, ключевые моменты и рекомендации.
В прошлой статье разбираются транзакция в серверном программировании и ключевые моменты управления.
Презентация и исходники доступны по ссылке.
search_path
search_path в PostgreSQL — это параметр, который определяет порядок поиска схем для объектов (таблиц, функций, представлений и т.д.) при их использовании в SQL-запросах при указании неполного имени без схемы.
SHOW search_path;
Обычно: "$user", public
Но есть и скрытые схемы — pgcatalog, pgtemp
Может устанавливаться как на кластер, так и на конкретную сессию и даже транзакцию.
Рекомендация выпиливать public, а ещё лучше указывать полное имя объекта — схема.таблица
Итоги
Ключевые моменты search_path:
- Определяет порядок поиска объектов по имени
- Можно настраивать на уровне БД, пользователя, сессии
- Важен для безопасности и предотвращения атак
Рекомендации:
- Всегда явно указывайте схемы при создании объектов
- Фиксируйте search_path в функциях
- Убирайте public из search_path в production
Пример кода:
— неочидный кейс про search_path
\timing on
CREATE OR REPLACE FUNCTION f() RETURNS int AS ‘SELECT 0’ LANGUAGE SQL;
DO ‘BEGIN PERFORM f() FROM generate_series(1, 10_000_000); END’;
— Time: 3031.713 ms (00:03.032)
— добавляем search_path, отличный от системного и…
ALTER FUNCTION f SET search_path = a,b,c;
DO ‘BEGIN PERFORM f() FROM generate_series(1, 10_000_000); END’;
— Time: 18003.809 ms (00:18.004)
Рост в 6 раз…
Больше примеров доступно на гитхабе и в видео.
В следующей статье мы разберём SQL инъекции.
Добавить комментарий