2012-04-18 3 views
3

Я пытаюсь сделать это в сценарии SQL, что я кормлю в psql:

ALTER DATABASE dbname SET SEARCH_PATH TO myschema,public 

, но мне нужно dbname быть динамически установлен в текущей базе данных, а чем жесткий.

Возможно ли это в PostgreSQL? Я попытался это, но он не работает:

ALTER DATABASE (select current_database()) SET SEARCH_PATH TO myschema,public; 
+1

Не могли бы вы создать оболочку вокруг этого SQL скрипта в Bash/Perl/Ruby/ваш любимый язык сценариев? – Brandan

+0

Это моя неудача. – dan

ответ

5

Вы не можете выполнить такое заявление в простом SQL, где идентификаторы не может быть параметризованным.
Вы можете написать plpgsql function to execute dynamic SQL.

С PostgreSQL 9,0 или более поздней версии вы можете также использовать DO statement:

DO $$ 
BEGIN 
EXECUTE ' 
ALTER DATABASE ' || current_database() || ' SET SEARCH_PATH TO myschema,public'; 
END; $$;