我想在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中创建表结构以建立多对多关系.
我的例子:
Product(name, price);
Bill(name, date, Products);
Run Code Online (Sandbox Code Playgroud) 我引用它 来启用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
我正在使用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) 我正在使用Postgres,并希望进行一个从CSV文件中获取的大更新查询,假设我得到了一张表(id, banana, apple).
我想运行一个更新香蕉而不是苹果的更新,每个新香蕉及其ID都将在CSV文件中.
我试着查看Postgres网站,但是这些例子正在扼杀我.
我想通过一个查询将数据插入到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
我需要从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.
我如何在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) 我::在网上看过各种涉及postgres代码的地方.例如:
SELECT '{apple,cherry apple, avocado}'::text[];
Run Code Online (Sandbox Code Playgroud)
这似乎是某种演员.::postgres 到底是什么时候应该使用它?
我尝试了一些谷歌搜索和搜索Postgres文档,::但没有得到很好的结果.
我尝试在Google中进行搜索:
我在postgres文档搜索按钮中尝试了以下搜索
问这个问题几乎令人尴尬,但我认为Google希望将来能够为其他人看到这个答案.
我想找到累积或运行的字段数量,并将其从分段插入表格.我的暂存结构是这样的:
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
postgresql ×10
sql ×7
plpgsql ×4
database ×2
types ×2
bigdata ×1
casting ×1
csv ×1
debugging ×1
dynamic-sql ×1
file-io ×1
function ×1
identifier ×1
if-statement ×1
many-to-many ×1
pgadmin ×1
sql-delete ×1
sql-insert ×1
syntax ×1