Questions tagged «plpgsql»

PL / pgSQL是PostgreSQL的默认过程语言。关于PL / pgSQL的问题也应该标记为“ PostgreSQL”。

10
截断Postgres数据库中的所有表
重建之前,我通常需要从PostgreSQL数据库中删除所有数据。我将如何直接在SQL中执行此操作? 目前,我设法提出了一条SQL语句,该语句返回我需要执行的所有命令: SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER'; 但是,一旦有了它们,我就看不到以编程方式执行它们的方法。

5
使用PL / pgSQL将查询结果存储在变量中
如何将查询结果分配给PL / pgSQL(PostgreSQL的过程语言)中的变量? 我有一个功能: 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 else part end if; end; return -- return my process result here $BODY$ LANGUAGE plpgsql VOLATILE 在上面的函数中,我需要存储此查询的结果: …

2
如何创建不返回任何内容的函数
我想用写一个函数pl/pgsql。我正在使用PostgresEnterprise Manager v3,并使用shell来创建函数,但是我必须在shell中定义返回类型。如果未定义返回类型,则无法创建函数。 如何创建没有返回结果的函数,即创建新表的函数?

2
如何在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函数中返回查询结果。 我发现返回类型应该为SETOF RECORD,对吗?但是return命令不正确。 …

2
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 $$中$$是占位符。 最后一行有点神秘: $$ LANGUAGE …


8
表名作为PostgreSQL函数参数
我想将表名作为Postgres函数中的参数传递。我尝试了这段代码: CREATE OR REPLACE FUNCTION some_f(param character varying) RETURNS integer AS $$ BEGIN IF EXISTS (select * from quote_ident($1) where quote_ident($1).id=1) THEN return 1; END IF; return 0; END; $$ LANGUAGE plpgsql; select some_f('table_name'); 我得到了: ERROR: syntax error at or near "." LINE 4: ...elect * from quote_ident($1) where quote_ident($1).id=1)... …

4
Postgres FOR LOOP
我试图从一张桌子中获得25个15,000个ID的随机样本。我试图每次循环,而不是每次都手动按run。我完全理解的不是Postgres的最佳用法,但这是我拥有的工具。这是我到目前为止所拥有的: for i in 1..25 LOOP insert into playtime.meta_random_sample select i, ID from tbl order by random() limit 15000 end loop

6
关于PLPGSQL的PostgreSQL 9.1 pg_restore错误
我正在将Postgres用于django项目,并且当前正在实现一个数据库备份/还原系统,该系统尽可能简单,当用户单击“备份”时执行pg_dump,然后在用户单击“还原备份”时执行pg_restore。 一切看起来不错,直到它实际上尝试执行pg_restore时才给出此错误: pg_restore:[归档器(db)]来自TOC条目3206的错误;0 0 COMMENT EXTENSION plpgsql pg_restore:[存档(db)]无法执行查询:错误:必须是扩展plpgsql的所有者命令是:COMMENT ON EXTENSION plpgsql是'PL / pgSQL程序语言'; 我研究了plpgsql是什么,我理解了这一点,对于错误,我尝试手动将“扩展所有者”设置为执行脚本并拥有数据库本身的用户,但并没有改变,这确实令人讨厌试图对所有事物设置注释的错误 这都是由pg_dump自动创建的,因此不能删除注释行,并且没有禁用注释的标志(我知道这些标志已经关闭),因此我对于解决该问题确实很执着。


6
使用PL / pgSQL在PostgreSQL中返回多个字段作为记录
我正在使用PL / pgSQL编写SP。 我想返回一条记录,其中包含来自几个不同表的字段。可能看起来像这样: 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 …

9
如何在PostgreSQL中进行大型非阻塞更新?
我想在PostgreSQL的一个表上做一个大的更新,但是我不需要在整个操作中维护事务的完整性,因为我知道我要更改的列在执行期间不会被写入或读取。更新。我想知道psql控制台中是否有一种简便的方法可以使这些类型的操作更快。 例如,假设我有一个名为“ orders”的表,其中有3500万行,我想这样做: UPDATE orders SET status = null; 为了避免转移到主题之外的讨论,我们假定当前3500万列的所有status值都设置为相同(非null)值,从而使索引无用。 该语句的问题在于生效需要很长时间(仅是由于锁定),并且所有更改的行都被锁定,直到完成整个更新为止。此更新可能需要5个小时,而类似 UPDATE orders SET status = null WHERE (order_id > 0 and order_id < 1000000); 可能需要1分钟。超过3500万行,执行上述操作并将其分成35个块,仅需35分钟,可为我节省4小时25分钟。 我可以使用脚本进一步分解(在此处使用伪代码): for (i = 0 to 3500) { db_operation ("UPDATE orders SET status = null WHERE (order_id >" + (i*1000)" + " AND order_id …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.