Как создать таблицы из импортированной внешней схемы с помощью функции цикла plpgsql
Я пытаюсь создать таблицы из всех таблиц, которые были импортированы в мои иностранные таблицы через импортную внешнюю схему. Причина, по которой я хочу это сделать, - просто скопировать данные из одной базы данных сервера PostgreSQL в другую. Я знаю, что не получу последовательности и другие индексы, связанные с таблицами, но это нормально. Я не хочу делать pg_dump, поэтому я пытался сделать это таким образом, но пока мне не повезло с приведенным ниже кодом.
Когда я запускаю функцию, запрос выполняется, но таблицы, похоже, не начинают создаваться в моей базе данных, и мне трудно понять, работает ли моя функция на самом деле или нет.
DROP FUNCTION gv.create_tables_from_foreign_schema(character varying,character varying);
CREATE OR REPLACE FUNCTION gv.create_tables_from_foreign_schema(_foreign_schema character varying, _local_schema character varying)
RETURNS void AS
$BODY$
declare
selectrow record;
begin
for selectrow in
select 'CREATE TABLE ' || quote_ident(_local_schema) || '.' ||quote_ident(t.table_name) || ' AS SELECT * FROM ' || quote_ident(_foreign_schema) || '.' ||quote_ident(t.table_name) || '' AS qry
from (
SELECT table_name
FROM information_schema.tables
WHERE table_schema = _foreign_schema
)t
loop
execute selectrow.qry;
end loop;
end;
$BODY$
LANGUAGE plpgsql
SELECT gv.create_tables_from_foreign_schema('gv_import_fra_pgv_2018a', 'gv')
Имеет ли функция смысл для вас?
1 ответ
Функция выглядит хорошо.
Я подозреваю, что все в порядке; Вы не видите никаких новых таблиц, потому что транзакция еще не завершена. Если вы загляните в каталог данных, вы должны увидеть, как создаются и записываются новые файлы.