我有一张桌子:
CREATE TABLE mytable (id SERIAL, name VARCHAR(10) PRIMARY KEY)
Run Code Online (Sandbox Code Playgroud)
现在我想向这个表中添加名称,但前提是它们不存在于表中,并且在这两种情况下都返回id. 我怎样才能用 PostgreSQL 做到这一点?
我已经看到了一些用于此的脚本,但是没有单个 SQL 语句可以执行此操作吗?
例如,我可以插入并返回id:
INSERT INTO mytable (name) VALUES ('Jonas') RETURNING id
Run Code Online (Sandbox Code Playgroud)
它第一次工作并返回id。但是如果Jonas表中已经存在它会失败,但id即使插入失败我也想返回。这可能与PostgreSQL有关吗?
小智 8
Upsert 语句曾经计划用于 9.1,但已推迟到 9.2,因此在此之前,您唯一的选择是在插入之前测试该值是否已存在。
或者,如果您只想拥有一个唯一标识符,您可以简单地使用序列 + nextval。
如果你想创建一个函数来做到这一点,这应该让你开始:
CREATE OR REPLACE FUNCTION upsert_tableName(arg1 type, arg2 type) RETURNS VOID AS $$
DECLARE
BEGIN
UPDATE tableName SET col1 = value WHERE colX = arg1 and colY = arg2;
IF NOT FOUND THEN
INSERT INTO tableName values (value, arg1, arg2);
END IF;
END;
$$ LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21661 次 |
| 最近记录: |