标签: plpgsql

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

CREATE OR REPLACE FUNCTION _chkLogin(userid varchar, pwd varchar)
RETURNS BOOLEAN AS
$BODY$
DECLARE 
 passed BOOLEAN;
BEGIN
 SELECT  (_password = $2) FROM _vRegistration WHERE _userid = $1;
 RETURN passed;
END;
$BODY$
LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

当我执行上面的代码时,我收到以下错误,

SELECT _chkLogin('username','abcd') as passed;
Run Code Online (Sandbox Code Playgroud)

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

我用过表演然后我得到了一个不同的问题,

PERFORM _chkLogin('username','abcd');
Run Code Online (Sandbox Code Playgroud)

错误:"执行"或附近的语法错误

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

postgresql plpgsql

10
推荐指数
1
解决办法
2万
查看次数

PostgreSQL:在plpgsql函数中回滚事务?

来自MS SQL世界,我倾向于大量使用存储过程.我目前正在编写一个应用程序使用了很多PostgreSQL plpgsql函数.我想做的是回滚特定函数中包含的所有INSERTS/UPDATES如果我在其中的任何一点得到异常.

我最初的印象是每个函数都包含在它自己的事务中,并且异常会自动回滚所有内容.但是,情况似乎并非如此.我想知道我是否应该将保存点与异常处理结合使用?但我并不真正了解事务和保存点之间的区别,以了解这是否是最好的方法.有什么建议吗?

CREATE OR REPLACE FUNCTION do_something(
         _an_input_var int
                ) RETURNS bool AS $$
        DECLARE
                _a_variable int;
        BEGIN
                INSERT INTO tableA (col1, col2, col3)
                        VALUES (0, 1, 2);

                INSERT INTO tableB (col1, col2, col3)
                        VALUES (0, 1, 'whoops! not an integer');

                -- The exception will cause the function to bomb, but the values 
                -- inserted into "tableA" are not rolled back.    

                RETURN True;
END; $$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

postgresql transactions plpgsql

10
推荐指数
1
解决办法
2万
查看次数

Postgresql函数最喜欢的单元测试方法?

我习惯于开发Java应用程序,但对于一个项目,我做了posgresql函数.我想为这些功能编写小型单元测试.

我目前正在寻找标准方法.我找到了pgTap和pgUnitTest,以及2007年的一篇文章:http://www.bigsmoke.us/postgresql-unit-testing/

你有什么方法对postgresql函数进行单元测试?你如何模拟数据/单独的testdata?如何隔离单元测试?哪个框架或方法受到青睐(我使用jUnit和testNG for java)?

postgresql frameworks unit-testing mocking plpgsql

10
推荐指数
1
解决办法
2584
查看次数

PostgreSQL IF-THEN-ELSE控制结构

为什么我总是从Postgres得到以下错误?

syntax error at or near "IF"

我读了PostgreSQL:文档:8.3:控制结构.首先,我尝试执行一个困难的查询(使用子查询),但后来我尝试执行一个这样的简单查询:

IF 2 <> 0 THEN select * from users; END IF;
Run Code Online (Sandbox Code Playgroud)

错误仍然是一样的.我究竟做错了什么?

sql postgresql plpgsql

10
推荐指数
2
解决办法
5万
查看次数

使用plpgsql获取函数内部当前函数的名称

无论如何,在plpgsql函数中你可以获得函数的名称吗?甚至是功能的OID?

我知道plpgsql中有一些"特殊"变量(如FOUND),但似乎没有办法解决这个问题.(虽然,如果您的函数是用C语言编写的,我已经读过了.)这并不重要,但它会使我做得更好/更不脆弱.

我正在使用PostgreSQL v.9.1.5

postgresql plpgsql postgresql-9.1

10
推荐指数
3
解决办法
4042
查看次数

Postgres 9.2 PL/pgSQL循环中的简单更新

我有一张桌子:

+----+----------+----------+
| id | trail_id | position |
+----+----------+----------+
| 11 | 16       | NULL     |
| 12 | 121      | NULL     |
| 15 | 121      | NULL     |
| 19 | 42       | NULL     |
| 20 | 42       | NULL     |
| 21 | 42       | NULL     |
+----+----------+----------+
Run Code Online (Sandbox Code Playgroud)

而且我正在寻找一种简单的方法来position使用递增整数进行更新(每个父级).所以在我完成后,表格应如下所示:

+----+-----------+----------+
| id | trail_id  | position |
+----+-----------+----------+
| 11 | 16        | 1        |
| 12 | 121       | 1 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql plpgsql postgresql-9.2

10
推荐指数
1
解决办法
7724
查看次数

如何在psql中使用外键约束将一个表的结构复制到另一个表?

使用时不会复制外键约束

create table table_name ( like source_table INCLUDING ALL)' 
Run Code Online (Sandbox Code Playgroud)

在Postgres.如何创建包含所有外键的现有表的副本.

postgresql foreign-keys plpgsql create-table

10
推荐指数
1
解决办法
6771
查看次数

循环并从多个表中选择数据的函数

我是Postgres的新手,拥有一个具有相同结构的多个表的数据库.我需要从每个表中选择符合特定条件的数据.

我可以通过一堆UNION查询来做到这一点,但是我需要搜索的表的数量会随着时间的推移而改变,所以我不想像那样硬编码.我一直在尝试开发一个循环遍历特定表的函数(它们有一个共同的命名约定)并返回一个记录表,但是当我查询函数时,我没有得到任何结果.功能代码如下:

CREATE OR REPLACE FUNCTION public.internalid_formaltable_name_lookup()
  RETURNS TABLE(natural_id text, name text, natural_id_numeric text) AS
$BODY$
DECLARE
    formal_table text;
begin
  FOR formal_table IN
    select table_name from information_schema.tables
    where table_schema = 'public' and table_name like 'formaltable%'
  LOOP
    EXECUTE 'SELECT natural_id, name, natural_id_numeric
             FROM ' || formal_table || 
           ' WHERE natural_id_numeric IN (
                select natural_id_numeric from internal_idlookup
                where internal_id = ''7166571'')';
    RETURN NEXT;
 END LOOP;
 Return;
END;
$BODY$
  LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我尝试使用该函数时没有收到任何错误,但它没有返回任何行:

SELECT * From internalid_formaltable_name_lookup();
Run Code Online (Sandbox Code Playgroud)

知道我哪里错了吗?

postgresql for-loop dynamic-sql plpgsql set-returning-functions

10
推荐指数
1
解决办法
4万
查看次数

一起执行多个功能而不会降低性能

我有这个过程,必须使用pl/pgsql进行一系列查询:

--process:
SELECT function1();
SELECT function2();
SELECT function3();
SELECT function4();
Run Code Online (Sandbox Code Playgroud)

为了能够在一次调用中执行所有操作,我创建了一个过程函数:

CREATE OR REPLACE FUNCTION process()
  RETURNS text AS
$BODY$
BEGIN
    PERFORM function1();
    PERFORM function2();
    PERFORM function3();
    PERFORM function4();
    RETURN 'process ended';
END;
$BODY$
  LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

问题是,当我总结每个函数自身所用的时间时,总计为200秒,而函数所process()用的时间超过一个小时!

也许这是一个内存问题,但我不知道postgresql.conf应该改变哪种配置.

DB在Debian 8中的PostgreSQL 9.4上运行.

postgresql plpgsql database-performance query-performance postgresql-performance

10
推荐指数
1
解决办法
6934
查看次数

postgresql中ROWTYPE,TYPE和RECORD之间的区别?

以下声明的用途是什么,我们在哪里使用这些类型的声明?

myrow tablename%ROWTYPE;
myfield tablename.columnname%TYPE;
arow RECORD;
Run Code Online (Sandbox Code Playgroud)

postgresql rdbms plpgsql sqldatatypes

10
推荐指数
1
解决办法
7638
查看次数