【问题标题】:Creating tables in postgres DB using plpgsql fucntion使用 plpgsql 函数在 postgres DB 中创建表
【发布时间】: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


【解决方案1】:

空结果有什么问题?

使用DO 语句可以满足您的需求:

DO LANGUAGE plpgsql $$BEGIN
   PERFORM mk_tbl();
END;$$;

【讨论】:

  • 嗯,感谢您的反馈,空结果没有问题。但是,最好运行查询并丢弃结果。同样,我想创建表但不返回任何内容。
  • 也许您可能想更新有关如何使用此代码块的答案。在 PLpgSQL 内部或独立。将其标记为有效答案对我更有帮助,因为我仍然无法执行所需的操作。
  • 我的回答中的语句是一条SQL语句,你可以像运行其他SQL语句一样运行它。运行CREATE TABLE 语句永远不会有结果。
猜你喜欢
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
相关资源
最近更新 更多