相关疑难解决方法(0)

表名作为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');
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

ERROR:  syntax error at or near "."
LINE 4: ...elect * from quote_ident($1) where quote_ident($1).id=1)...
                                                             ^

********** Error **********

ERROR: syntax error at or near "."
Run Code Online (Sandbox Code Playgroud)

以下是更改为此时出现的错误select * from quote_ident($1) tab where tab.id=1:

ERROR:  column tab.id does not exist
LINE 1: ...T EXISTS …
Run Code Online (Sandbox Code Playgroud)

postgresql function dynamic-sql plpgsql identifier

69
推荐指数
4
解决办法
7万
查看次数

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

我是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万
查看次数

根据表值找出哪个模式

我的数据库基于客户端分成模式(即:每个客户端都有自己的模式,具有相同的数据结构).

我也碰巧有一个外部动作,不知道它应该针对哪个架构.它来自系统的另一部分,它没有客户端的概念,也不知道它在哪个客户端设置中运行.在我处理它之前,我必须找出请求需要定位的模式

为了找到正确的模式,我必须找出哪个包含R特定唯一ID 的记录(字符串)

从我的理解,以下

SET search_path TO schema1,schema2,schema3,...
Run Code Online (Sandbox Code Playgroud)

将只查看schema1中的表(或与表匹配的第一个模式),并且不会进行全局搜索.

有没有办法让我在所有模式中进行全局搜索,或者我只需要使用for循环并迭代所有模式,一次一个?

sql django postgresql database-connection postgresql-9.2

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

使用Postgres从多个模式中选择(检索)所有记录

我有一个PostgreSQL数据库,其中包含一些模式,如下所示:

My_Database
 |-> Schemas
    |-> AccountA
    |-> AccountB
    |-> AccountC
    |-> AccountD
    |-> AccountE
           .
           .
           .
    |-> AccountZ
Run Code Online (Sandbox Code Playgroud)

所有的模式都有一个名为表product具有称为列title.我想知道是否可以执行select语句来检索具有特定条件的所有模式的所有记录.

我到目前为止找到的唯一方法是按帐户运行查询帐户,如下所示.

SET search_path TO AccountA;

SELECT title FROM product WHERE title ILIKE '%test%';
Run Code Online (Sandbox Code Playgroud)

模式是动态创建的,因此我不知道它们的名称或存在多少名称.

sql postgresql inheritance database-design postgresql-8.4

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

从表中选择一组动态列并获取每个列的总和

是否可以在 Postgres 中执行以下操作:

SELECT column_name FROM information_schema WHERE table_name = 'somereport' AND data_type = 'integer';

SELECT SUM(coulmn_name[0]),SUM(coulmn_name[1]) ,SUM(coulmn_name[3]) FROM somereport;
Run Code Online (Sandbox Code Playgroud)

换句话说,我需要根据特定条件从表中选择一组列,然后对表中的每一列求和。

我知道我可以在循环中执行此操作,因此我可以独立计算每个列,但显然这需要对从信息模式查询返回的每个列进行查询。例如:

FOR r IN select column_name from information_schema where report_view_name = 'somereport' and data_type = 'integer';
LOOP
    SELECT SUM(r.column_name) FROM somereport;
END
Run Code Online (Sandbox Code Playgroud)

sql postgresql dynamic-sql plpgsql aggregate-functions

3
推荐指数
1
解决办法
3625
查看次数