相关疑难解决方法(0)

UPSERT 与 ON CONFLICT 使用 UPDATE 部分中的源表中的值

鉴于:

CREATE TABLE A (
PK_A INT8 NOT NULL,
A INT8,
PRIMARY KEY (PK_A)
);

CREATE TABLE B (
PK_B INT8 NOT NULL,
B INT8,
PRIMARY KEY (PK_B)
);
Run Code Online (Sandbox Code Playgroud)

这个查询:

insert into table_b (pk_b, b) 
select pk_a,a from table_a 
on conflict (b) do update set b=a;
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

ERROR:  column "a" does not exist
LINE 1: ...elect pk_a,a from table_a on conflict (b) do update set b=a;
                                                                 ^
HINT:  There is a column named "a" in table "*SELECT*", but it cannot …
Run Code Online (Sandbox Code Playgroud)

postgresql upsert postgresql-9.5

27
推荐指数
2
解决办法
8万
查看次数

如何将带有数组字段的表类型传递给 postgresql 中的函数

我有一张桌子叫书

CREATE TABLE book
(
  id smallint NOT NULL DEFAULT 0,       
  bname text,       
  btype text,
  bprices numeric(11,2)[],
  CONSTRAINT key PRIMARY KEY (id )
)
Run Code Online (Sandbox Code Playgroud)

和一个函数 save_book

CREATE OR REPLACE FUNCTION save_book(thebook book)
  RETURNS text AS
$BODY$
DECLARE 
myoutput text :='Nothing has occured';
BEGIN

    update book set 
    bname=thebook.bname,
    btype=thebook.btype,bprices=thebook.bprices  WHERE id=thebook.id;

    IF FOUND THEN
        myoutput:= 'Record with PK[' || thebook.id || '] successfully updated';
        RETURN myoutput;
    END IF;

    BEGIN
        INSERT INTO book values(thebook.id,thebook.bname,thebook.btype,
        thebook.bprices);
        myoutput:= 'Record successfully added';           
    END;
 RETURN myoutput; …
Run Code Online (Sandbox Code Playgroud)

postgresql datatypes functions postgresql-9.1 array

8
推荐指数
2
解决办法
9762
查看次数

多次调用 UPSERT 函数到不同的输入

我有一个功能:

merge_vehicles(vid, cid, vname, reg_no, name, name_1st)
Run Code Online (Sandbox Code Playgroud)

我可以在输入上多次调用它吗

(2335, 55, '246BDH', '246BDH', '811', 1),
(2336, 55, '038THX', '038THX', '831', 1),
....
Run Code Online (Sandbox Code Playgroud)

该函数是一个UPSERT实现返回void. 这是一个仓库数据库(事实表)。我们有一个实时数据库,每小时可以获取 1000 多个输入。我们想使用此命令将我们的数据与新数据合并。

它是一个表函数。(我已经为我们拥有的每个表定义了类似的函数 - 即 5。)结果是,它将更新现有行(如果存在),否则插入新行。

Postgres 版本是 9.3。

函数是此处接受的答案的一个版本:

postgresql functions upsert

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