【发布时间】:2015-06-01 13:10:39
【问题描述】:
使用以下代码,创建包含存储过程的文本文件“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
TIA
PostgreSQL 9.3 版
Windows 7 旗舰版
PgAdmin 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$
等等,等等,等等,……
【问题讨论】:
-
您能否发布中提到的错误消息(以及它导致的行)我的问题是脚本中生成了无法识别的符号(如“+”和“\r” ?
-
@RadekPostołowicz 当然可以。第一个错误是:psql:C:/temp/myprocedures:944 错误:“pg_get_functiondef”第 1 行或附近的语法错误:pg_get_functiondef。对 myprocedures 文件的检查表明它以“pg_get_functiondef”开头,很好地位于文件顶部的中心。想法??
标签: postgresql psql pgadmin