【发布时间】:2016-06-17 18:40:51
【问题描述】:
使用 pgAdmin III,我想专门使用 PL/pgSQL 函数在我的 postgres 数据库中创建表。下面的一组命令对我来说很好。
Create or Replace Function mk_tbl()
Returns Integer As $$
Declare
Begin
Drop Table if exists sel_streets;
Create Table sel_streets
(
id Integer,
Geom geometry
);
Create Index sel_streets_indx
ON sel_streets Using
gist (geom);
Return (1);
End $$ Language plpgsql volatile;
我通过这个命令调用函数:
Select mk_tbl();
我的问题是每次调用此函数时,它都会在 postgres DB 中创建表并返回不需要的“1”(在 SQL 编辑器输出面板中)。我知道最终一个函数应该返回一些东西,我也可以像这样使用 void 构造:
Create or Replace Function mk_tbl()
Returns Void As $$
...
但是,我想要调用这个函数,它应该只在我的 potgres 数据库中创建表并且不应该返回任何内容。是否可以专门使用 PL/pgSQL 来做到这一点?
【问题讨论】:
-
您正在寻找的是“真正的”存储过程。不幸的是,Postgres 不支持它们,所以你必须使用
returns void(无关:语言名称是一个标识符,不要用单引号括起来:应该使用language plpgsql)。 -
我不确定 perform 是否对你有帮助 -
do $$ begin perform mk_tbl(); end;$$; -
@a_horse_with_no_name:感谢您的指正。我已经编辑了代码。其次,如果我使用 PL/Python 或 PL/R 调用这个函数,那么可以这样做吗?
-
postgresql.org/docs/current/static/plpgsql-statements.html - "...执行查询并丢弃结果..."
标签: postgresql plpgsql