С помощью следующего кода создается текстовый файл «myprocedures», содержащий хранимые процедуры.
Можно ли вообще без переделки применить этот файл к существующей базе данных на другой машине? Или как лучше всего использовать этот файл для генерации процедур в другой базе данных? (т. е. как его можно использовать непосредственно в PgAdmin или psql?).
Моя проблема в том, что в скрипте сгенерированы символы (такие как "+" и "\r", которые не распознаются с помощью
"C:\Program Files\PostgreSQL\9.3\bin\psql.exe" -h xxx.xxx.x.xxx -p 5432 -U postgres -d chaos -1 -v ON_ERROR_STOP -f C:/temp/myprocedures
ТИА
Постгрес SQL версии 9.3
Windows 7 Ultimate
ПгАдмин III
File: dump_stored_procedures.sql
SELECT pg_get_functiondef(f.oid)
FROM pg_catalog.pg_proc f
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
WHERE n.nspname = 'public';
--------------------------------------------------------
File: dump_procedures.bat
setlocal
set PGPASSWORD=password
"C:\Program Files\PostgreSQL\9.3\bin\psql.exe" -h localhost -U postgres
-d chaos -f C:/temp/dump_stored_procedures.sql >> C:/temp/myprocedures
pause
endlocal
Редактировать № 1: Вот пример первых нескольких определений процедур в myprocedures. Обратите внимание на ненужное добавление "pg_get_function", "---" и всех "+" и "\r":
pg_get_functiondef
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION public.empty(text) +
RETURNS boolean +
LANGUAGE sql +
IMMUTABLE +
AS $function$ SELECT $1 ~ '^[[:space:]]*$'; $function$ +
CREATE OR REPLACE FUNCTION public.f_getallprogressnotes(groupid character varying) +
RETURNS SETOF view_progressnote +
LANGUAGE sql +
AS $function$ \r +
\r +
select \r +
et.eid, et.groupid, et.cpatient, et.tencounter, et.checkout, et.notseen, \r +
et.complexity, p.note, r.appointmentmetadata, r.rtn\r +
from \r +
encountertimes et \r +
left outer join \r +
progressnote p \r +
on \r +
(et.eid = p.eid)\r +
left outer join \r +
returntooffice r \r +
on \r +
(et.eid = r.eid) \r +
where\r +
et.groupid =$1 \r +
order by et.tencounter desc \r +
\r +
$function$ +
CREATE OR REPLACE FUNCTION public.f_getallvitalsigns(groupid character varying) +
RETURNS SETOF vitalsigns +
LANGUAGE sql +
AS $function$ \r +
select v.*\r +
from \r +
vitalsigns v \r +
right join ( \r +
select \r +
eid, tencounter \r +
from \r +
encountertimes\r +
where\r +
groupid = $1\r +
order by\r +
tencounter asc\r +
) j\r +
on (v.eid = j.eid) \r +
$function$
и т.д., и т.д., и т.д., ....