问题标签 [plpgsql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3768 浏览

sql - 函数中命名参数的 PostgreSQL 问题

Linux 上的 PostgreSQL 8.4。我有一个功能:

当我尝试创建它时返回此错误:

我试过了ALIAS FOR,没有运气。想法?

0 投票
5 回答
23144 浏览

postgresql - PostgreSQL Syntax error in PGAdmin

I am new to PostgreSQL and am using the query tool in PGAdmin. I'm trying to run pgsql queries that use variables, but I can't seem to get the syntax right.

Here's a sample query that gives a syntax error:


Update:
Ok, let me try and explain. I come from a SQL server background. In the management studio, I can open a query window and play with (T)-SQL queries.

For example, I can write something like this:

I know this is a dumb example, but I'm just trying to declare a variable and do something with it. I'm trying to familiarise myself with PL/PGSQL.


Update, again:
It's me again. I'm trying the script below and get a "[ERROR ] 7.0-2: syntax error, unexpected character". Is this meant to work in PGAdmin?

0 投票
3 回答
1372 浏览

postgresql - 如何在 plpgsql 函数中获取表的关键字段?

我需要创建一个在每次 UPDATE 和 INSERT 操作后触发的函数,并检查在某些条件下执行操作的表的关键字段。

该函数(和触发器)需要是一个通用的,它不应该有硬编码的表名/字段名。

我被困在需要访问表名及其模式部分的部分 - 检查哪些字段是 PRIMARY KEY 的一部分。

0 投票
3 回答
14196 浏览

postgresql - 在 PL/pgsql 中使用 EXECUTE 从通用触发器插入 NEW.*

我有许多使用 Postgres“分区”功能的表。我想在每个表上定义一个通用的 BEFORE INSERT OF ROW 触发器,该触发器将 1)如果对父表发生插入,则动态创建分区,以及 2)对分区重新执行插入。

就像是:

但是“新”记录在 EXECUTE SQL 中不可见。我怎样才能使这项工作尽可能简单?

作为替代方案,我可以以某种方式遍历 NEW 记录中的字段吗?

我考虑过使用临时表:

但这也不起作用,因为缓存了对临时表的引用:为什么在访问 PL/PgSQL 函数中的临时表时出现“与 OID ##### 的关系不存在”错误?

我正在使用 Postgres 8.2,无法更改为任何其他版本。

编辑:
正如@a​​lvherre 指出的那样,这可能可以在 Postgres 8.4 中使用 EXECUTE ... USING 语法来完成。请参阅http://wiki.postgresql.org/wiki/PL/pgSQL_Dynamic_Triggers中的示例

0 投票
2 回答
25361 浏览

sql - 从 PostgreSQL 存储过程返回记录集的最简单方法是什么?

我只是有一个包含国家列表及其 ISO 国家代码的表格。我将查询包装在存储过程(又名函数)中,例如:

我得到的错误是:

我知道我可以定义一个类型,然后像游标一样遍历记录集,但是 IIRC 在更新版本的 PostgreSQL(我使用的是 8.4.3)下有更好的方法来做到这一点,但我正在努力尝试记住。


编辑:

这有效:

注意“RETURNS setof [table name]”。但它似乎不是最灵活的。如果我尝试返回几个表的连接,它就会崩溃。

0 投票
2 回答
21798 浏览

postgresql - 错误:查询没有结果数据的目的地

当我执行上面的代码时,出现以下错误,

错误:查询没有结果数据的目的地

我已经使用 perform 然后我遇到了不同的问题,

错误:“执行”处或附近的语法错误

建议我应该怎么做才能克服这个错误。

0 投票
2 回答
26800 浏览

postgresql - PL/pgSQL 中的 EXECUTE...USING 语句不适用于记录类型?

我正在尝试在 PL/PgSQL 中编写一个函数,该函数必须与它作为参数接收的表一起使用。

我在函数定义中使用 EXECUTE..INTO..USING 语句来构建动态查询(这是我知道的唯一方法)但是......我遇到了 RECORD 数据类型的问题。

让我们考虑下面的(极其简化的)示例。

它输出以下错误:

错误:无法识别记录数据类型中的列“descr”

尽管我使用的语法对我来说似乎是有效的。我不能使用静态选择(在示例中注释),因为我想动态地引用列名。

所以..有人知道上面的代码有什么问题吗?

0 投票
2 回答
21939 浏览

postgresql - PostgreSQL - 尽管运行 CREATE LANGUAGE,但语言 pgplsql 不存在

我只是试图创建我的第一个 plpgsql 函数。执行脚本时,我得到

错误:语言“'plpgsql'”不存在

然后我运行命令 CREATE LANGUAGE plpgsql; 显示以下错误:

错误:语言“plpgsql”已经存在

命令正在同一个数据库上运行。

问候

彼得

0 投票
8 回答
4385 浏览

datetime - 如何使用 PL/pgSQL 舍入到最接近的 X 分钟?

如何四舍五入到最接近的 X 分钟?

这是我的尝试:

例子:

应该返回

0 投票
1 回答
5827 浏览

python - PostgreSQL 中的 Python 存储过程

我们对 Postgres 还很陌生,并且来自 Microsoft Sql Server。

我们现在想写一些存储过程。好吧,在努力获得比hello world在 pl/pgsql 中工作更复杂的东西之后,我们决定如果我们要学习一门新语言会更好,我们不妨学习 Python,因为我们在大约 15 分钟内得到了相同的查询(注意,我们中没有人真正了解python)。

因此,与 pl/psql 相比,我对它有一些疑问。

  1. pl/Pythonu 是否比 pl/pgsql 慢?
  2. 对于如何使用它编写好的存储过程,是否有任何“好的”参考?Postgres 文档中的五个短页并不能真正告诉我们足够的信息。
  3. 查询准备呢?应该一直使用吗?
  4. 如果我们在很多查询计划中使用 SD 和 GD 数组,它是否会变得太满或对服务器产生负面影响?如果太满,它会自动删除旧值吗?
  5. 它是否有希望成为一种值得信赖的语言?

此外,我们的存储过程使用非常轻。现在我们只有 4 个,但我们仍在尝试从 Sql Server 特定语法转换少量代码(例如变量,不能在存储过程之外的 Postgres 中使用)