Tag: plpgsql

从函数返回setoflogging(虚拟表)

我需要一个Postgres函数来返回一个虚拟表(如在Oracle中)与自定义内容。 该表将有3列和未知数量的行。 我只是无法在互联网上find正确的语法。 想象一下: CREATE OR REPLACE FUNCTION "public"."storeopeninghours_tostring" (numeric) RETURNS setof record AS DECLARE open_id ALIAS FOR $1; returnrecords setof record; BEGIN insert into returnrecords('1', '2', '3'); insert into returnrecords('3', '4', '5'); insert into returnrecords('3', '4', '5'); RETURN returnrecords; END; 这是怎么写的?

PostgreSQL 9.1关于PLPGSQL的pg_restore错误

我正在使用Postgres做一个django项目,目前我正在实现一个尽可能简单的数据库备份/恢复系统,当用户单击备份时执行pg_dump,然后在单击还原备份时执行pg_restore。 所有似乎都很好,直到它实际上试图执行pg_restore,在这个时候它给这个错误: pg_restore:[archiver(db)]来自TOC项目3206的错误; 0 0 COMMENT EXTENSION plpgsql pg_restore:[archiver(db)]无法执行查询:ERROR:必须是扩展plpgsql的所有者命令是:COMMENT ON EXTENSION plpgsql是'PL / pgSQL过程语言'; 我已经研究了什么plpgsql是等,我明白了,关于错误,我试图手动设置“扩展的所有者”执行脚本的用户,拥有数据库本身,但没有改变,它真的很烦人,因为它试图对所有事情发表评论的错误 这一切都是由pg_dump自动创build的,所以注释行不能被删除,也没有标志来禁用注释(我知道closures),所以我真的坚持如何解决这个问题。

如何执行pl / pgsql代码而不创build函数?

使用SQL Server,我可以通过SQL Server Management Studio或任何其他客户端,使用完整的程序逻辑执行代码特别的T-SQL代码。 我已经开始使用PostgreSQL,并且遇到了一点问题,PGSQL需要将任何逻辑embedded到函数中。 有没有办法执行PL / PGSQL代码而不创build执行function?

如何在PostgreSQL中的函数内返回SELECT的结果?

我在PostgreSQL中有这个函数,但我不知道如何返回查询的结果: CREATE OR REPLACE FUNCTION wordFrequency(maxTokens INTEGER) RETURNS SETOF RECORD AS $$ BEGIN SELECT text, count(*), 100 / maxTokens * count(*) FROM ( SELECT text FROM token WHERE chartype = 'ALPHABETIC' LIMIT maxTokens ) as tokens GROUP BY text ORDER BY count DESC END $$ LANGUAGE plpgsql; 但是我不知道如何在PostgreSQL函数中返回查询的结果。 我发现返回types应该是SETOF RECORD ,对不对? 但是,返回命令是不正确的。 什么是正确的方法来做到这一点?

使用PL / pgSQL将多个字段作为PostgreSQL中的logging返回

我正在写一个SP,使用PL / pgSQL。 我想返回一个由几个不同表格的字段组成的logging。 可能看起来像这样: CREATE OR REPLACE FUNCTION get_object_fields(name text) RETURNS RECORD AS $$ BEGIN — fetch fields f1, f2 and f3 from table t1 — fetch fields f4, f5 from table t2 — fetch fields f6, f7 and f8 from table t3 — return fields f1 … f8 as a record END $$ […]

我如何在PostgreSQL中进行大量的无阻塞更新?

我想在PostgreSQL的表上​​做一个大的更新,但是我不需要在整个操作中维护事务完整性,因为我知道我正在更改的列不会被写入或读取更新。 我想知道在psql控制台中是否有一种简单的方法来使这些types的操作更快。 例如,假设我有一个包含3500万行的“orders”表,我想这样做: UPDATE orders SET status = null; 为了避免被转移到偏离的讨论,让我们假设3500万列的所有状态值目前设置为相同(非空值),从而使索引无用。 这个声明的问题是生效需要很长时间(仅仅是因为locking),所有更改的行都被locking,直到整个更新完成。 此更新可能需要5个小时,而类似的 UPDATE orders SET status = null WHERE (order_id > 0 and order_id < 1000000); 可能需要1分钟。 超过三千五百万行,做上面的,并把它分成35块只需要35分钟,为我节省4小时25分钟。 我可以用脚本(在这里使用伪代码)进一步分解: for (i = 0 to 3500) { db_operation ("UPDATE orders SET status = null WHERE (order_id >" + (i*1000)" + " AND order_id <" + ((i+1)*1000) […]

如何创build不返回任何内容的函数

我想用pl / pgsql编写一个函数我正在使用PostgresEnterpreis Manager v3并使用shell来创build函数,但在shell中我必须定义返回types。 如果我不定义返回types,我不能创build一个函数。 如何创build一个没有返回结果的函数,即创build一个新表的函数?

PL / pgSQL中使用的是什么?

PL / pgSQL是全新的, 这个函数中双美元符号的含义是什么: CREATE OR REPLACE FUNCTION check_phone_number(text) RETURNS boolean AS $$ BEGIN IF NOT $1 ~ e'^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$' THEN RAISE EXCEPTION 'Wrong formated string "%". Expected format is +999 999'; END IF; RETURN true; END; $$ LANGUAGE plpgsql STRICT IMMUTABLE; 我猜测,在RETURNS boolean AS $$值为RETURNS boolean AS $$ , $$是一个占位符。 最后一行有点神秘: $$ […]

使用postgresql存储过程将查询结果存储在variables中

如何使用postgresql存储过程将查询结果存储在variables中 我有一个存储过程 CREATE OR REPLACE FUNCTION test(x numeric) RETURNS character varying AS $BODY$ DECLARE name character varying(255); begin name ='SELECT name FROM test_table where id='||x; if(name='test')then –do somthing else –do the eles part end if; end; return — return my process result here $BODY$ LANGUAGE plpgsql VOLATILE 在上面的过程中,我需要存储 'SELECT name FROM test_table where id='||id; 这个查询将结果返回给variables名称 […]

使用pgAdmindebuggingPostgreSQL函数

我指的是在PostgreSQL服务器中启用debugging器,以便通过使用pgadmin逐步debugging代码来debuggingplpgsql函数。 我已经在postgresql.conf设置了shared_preload_libraries = '$libdir/plugins/plugin_debugger.dll' ,运行pldbgapi.sql ,然后重新启动服务器。 这些步骤应该已经成功运行了, plugin_debugger.dll应该可以通过使用命令show shared_preload_libraries进行validation,并且可以通过右键单击pgAdmin中的函数来看到上下文菜单中的debugging选项。 当select“debugging” – >“debugging”时,会popup一个窗口,让我inputinput参数的值。 但在此之后,当我按OK ,它根本不响应。 任何想法或我错过了在服务器上的debugging器设置? 我使用PostgreSQL 8.3和pgAdmin 1.14