我在PostgreSQL 9.5中有以下UPSERT:
INSERT INTO chats ("user", "contact", "name")
VALUES ($1, $2, $3),
($2, $1, NULL)
ON CONFLICT("user", "contact") DO NOTHING
RETURNING id;
Run Code Online (Sandbox Code Playgroud)
如果没有冲突,则返回如下内容:
----------
| id |
----------
1 | 50 |
----------
2 | 51 |
----------
Run Code Online (Sandbox Code Playgroud)
但如果存在冲突,则不会返回任何行:
----------
| id |
----------
Run Code Online (Sandbox Code Playgroud)
id如果没有冲突,我想返回新列,或者返回id冲突列的现有列.
可以这样做吗?如果是这样,怎么样?
我相信标题是不言自明的.如何在PostgreSQL中创建表结构以建立多对多关系.
我的例子:
Product(name, price);
Bill(name, date, Products);
Run Code Online (Sandbox Code Playgroud) 我想通过一个查询将数据插入到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
journeypost=# INSERT INTO user_data.user_data (username,randomint) VALUES ('mahman',1);
ERROR: array value must start with "{" or dimension information
LINE 1: ... user_data.user_data (username,randomint) VALUES ('mahman...
journeypost=# INSERT INTO user_data.user_data (username,randomint) VALUES {'mahman',1};
ERROR: syntax error at or near "{"
LINE 1: ...O user_data.user_data (username,randomint) VALUES {'mahman',...
journeypost=# INSERT INTO user_data.user_data (username,randomint) VALUES (2,{'mahman',1});
ERROR: syntax error at or near "{"
LINE 1: ...ser_data.user_data (username,randomint) VALUES (2,{'mahman',...
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL中,上述不同的INSERT语句失败了.我做错了什么?
编辑:
我的架构:
journeypost=# \dt user_data.*
List of relations
Schema | Name | Type | …Run Code Online (Sandbox Code Playgroud)