автоматизировать создание схемы в PostgreSQL (может быть, plpgsql?) - PullRequest
0 голосов
/ 16 июня 2011

У меня есть большая база данных (в PostgreSQL 8.4), которую я пытаюсь анализировать небольшими частями. Для этого я копирую части содержимого большой базы данных в другие схемы (я знаю, что копирование данных противоречит философии баз данных, но без этого шага анализ идет слишком медленно).

Есть довольно много SQL-команд, которые мне нужно выполнить, чтобы получить новую схему со всеми необходимыми таблицами внутри нее. Однако разница между созданием одной схемы и созданием другой схемы очень мала (в принципе это просто имя схемы и другое значение в разделе «WHERE»).

У меня следующий вопрос:

Можно ли написать функцию, которая принимает определенное значение в качестве параметра и использует этот параметр в предложении where (и в качестве имени схемы?) Если это возможно, какой программный язык вы бы предложили (возможно, plpgsql) и как бы выглядел такой скрипт (как скелет)?

Заранее спасибо!

1 Ответ

2 голосов
/ 16 июня 2011

Не уверен, что я правильно понимаю ваш вопрос, но, похоже, следует использовать временную схему:

create temporary table foo as select * from bar where ...

Иногда полезно использовать одно и то же имя:

create temporary table foo as select * from foo where ...

Иначе да, динамический SQL работает:

create function do_stuff(_table regclass) returns void as $$
begin
  execute 'select 1 from ' || _table;
end; $$ language plpgsql strict;
select do_stuff('schemaname.tablename');

http://www.postgresql.org/docs/9.0/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

...