小编Erw*_*ter的帖子

表名作为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万
查看次数

如何在PostgreSQL中实现多对多关系?

我相信标题是不言自明的.如何在PostgreSQL中创建表结构以建立多对多关系.

我的例子:

Product(name, price);
Bill(name, date, Products);
Run Code Online (Sandbox Code Playgroud)

sql database postgresql database-design many-to-many

68
推荐指数
1
解决办法
6万
查看次数

使用pgAdmin调试PostgreSQL函数

我引用 来启用PostgreSQL服务器中的调试器,以便通过使用pgadmin单步调试plpgsql函数.

我已经设置shared_preload_libraries = '$libdir/plugins/plugin_debugger.dll'postgresql.conf,运行pldbgapi.sql,并重新启动服务器.

这些步骤应该已成功运行并且plugin_debugger.dll应该成功加载,因为可以使用该命令进行验证show shared_preload_libraries,我可以在上下文菜单中看到调试选项,右键单击pgAdmin中的函数.

在此输入图像描述

选择"Debugging" - > Debug时,会弹出一个窗口,允许我输入输入参数的值.但在那之后,当我按下时OK,它根本没有响应.

在此输入图像描述

任何想法或我错过了服务器上的调试器设置?

我正在使用PostgreSQL 8.3和pgAdmin 1.14

postgresql debugging plpgsql pgadmin

65
推荐指数
2
解决办法
3万
查看次数

使用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 a record
END
$$ language plpgsql; 
Run Code Online (Sandbox Code Playgroud)

如何将不同表中的字段作为单个记录中的字段返回?

[编辑]

我已经意识到我上面给出的例子有点过于简单了.我需要检索的一些字段将被保存为要查询的数据库表中的单独行,但我想在"展平"记录结构中返回它们.

下面的代码应该有助于进一步说明:

CREATE TABLE user (id int, school_id int, name varchar(32));

CREATE TYPE my_type (
  user1_id   int,
  user1_name varchar(32),
  user2_id   int,
  user2_name varchar(32)
); …
Run Code Online (Sandbox Code Playgroud)

sql postgresql types stored-procedures plpgsql

64
推荐指数
4
解决办法
14万
查看次数

如何使用Postgres中的CSV文件中的值更新选定的行?

我正在使用Postgres,并希望进行一个从CSV文件中获取的大更新查询,假设我得到了一张表(id, banana, apple).

我想运行一个更新香蕉而不是苹果的更新,每个新香蕉及其ID都将在CSV文件中.

我试着查看Postgres网站,但是这些例子正在扼杀我.

sql database csv postgresql file-io

64
推荐指数
1
解决办法
8万
查看次数

使用Postgres一次在3个表中插入数据

我想通过一个查询将数据插入到3个表中.
我的表如下所示:

CREATE TABLE sample (
   id        bigserial PRIMARY KEY,
   lastname  varchar(20),
   firstname varchar(20)
);

CREATE TABLE sample1(
   user_id    bigserial PRIMARY KEY,
   sample_id  bigint REFERENCES sample,
   adddetails varchar(20)
);

CREATE TABLE sample2(
   id      bigserial PRIMARY KEY,
   user_id bigint REFERENCES sample1,
   value   varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

我将获得一个密钥以换取每次插入,我需要在下一个表中插入该密钥.
我的查询是:

insert into sample(firstname,lastname) values('fai55','shaggk') RETURNING id;
insert into sample1(sample_id, adddetails) values($id,'ss') RETURNING user_id;
insert into sample2(user_id, value) values($id,'ss') RETURNING id;
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行单个查询,他们只是向我返回值,我不能立即在下一个查询中重用它们.

怎么做到这一点?

sql postgresql common-table-expression sql-insert sql-returning

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

按ID删除数百万行的最佳方法

我需要从PG数据库中删除大约200万行.我有一个我需要删除的ID列表.但是,我尝试这样做的任何方式都需要几天时间.

我尝试将它们放在一个表中,并在100个批次中进行.4天后,这仍然在运行,只删除了297268行.(我必须从ID表中选择100个id,删除该列表中的IN,从ids表中删除我选择的100个).

我试过了:

DELETE FROM tbl WHERE id IN (select * from ids)
Run Code Online (Sandbox Code Playgroud)

那也是永远的.很难判断多久,因为我看不到它的进展直到完成,但查询仍然在2天后运行.

当我知道要删除的特定ID时,只需要寻找从表中删除的最有效方法,并且有数百万个ID.

sql postgresql bigdata postgresql-performance sql-delete

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

PostgreSQL IF语句

我如何在Postgres中进行此类查询?

IF (select count(*) from orders) > 0
THEN
  DELETE from orders
ELSE 
  INSERT INTO orders values (1,2,3);
Run Code Online (Sandbox Code Playgroud)

sql postgresql if-statement plpgsql

63
推荐指数
4
解决办法
16万
查看次数

在PostgreSQL中做什么?

::在网上看过各种涉及postgres代码的地方.例如:

SELECT '{apple,cherry apple, avocado}'::text[];
Run Code Online (Sandbox Code Playgroud)

这似乎是某种演员.::postgres 到底是什么时候应该使用它?

我尝试了一些谷歌搜索和搜索Postgres文档,::但没有得到很好的结果.
我尝试在Google中进行搜索:

  • postgres双结肠
  • postgres ::
  • ::

我在postgres文档搜索按钮中尝试了以下搜索

  • 双结肠
  • 双冒号演员
  • ::

问这个问题几乎令人尴尬,但我认为Google希望将来能够为其他人看到这个答案.

postgresql syntax types casting typecast-operator

62
推荐指数
2
解决办法
3万
查看次数

计算PostgreSQL中的累积和

我想找到累积或运行的字段数量,并将其从分段插入表格.我的暂存结构是这样的:

ea_month    id       amount    ea_year    circle_id
April       92570    1000      2014        1
April       92571    3000      2014        2
April       92572    2000      2014        3
March       92573    3000      2014        1
March       92574    2500      2014        2
March       92575    3750      2014        3
February    92576    2000      2014        1
February    92577    2500      2014        2
February    92578    1450      2014        3          
Run Code Online (Sandbox Code Playgroud)

我希望我的目标表看起来像这样:

ea_month    id       amount    ea_year    circle_id    cum_amt
February    92576    1000      2014        1           1000 
March       92573    3000      2014        1           4000
April       92570    2000      2014        1           6000
February    92577    3000      2014 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql analytic-functions cumulative-sum window-functions

62
推荐指数
1
解决办法
6万
查看次数