标签: upsert

INSERT ... ON CONFLICT DO UPDATE 中的列引用不明确

给定一个表:

CREATE TABLE IF NOT EXISTS test."TestCounter" 
("id" TEXT PRIMARY KEY, 
 "count" INTEGER);
Run Code Online (Sandbox Code Playgroud)

我想插入一条记录并增加计数器(如果该记录已存在)

CREATE TABLE IF NOT EXISTS test."TestCounter" 
("id" TEXT PRIMARY KEY, 
 "count" INTEGER);
Run Code Online (Sandbox Code Playgroud)

目前我收到此错误:

ERROR:  column reference "count" is ambiguous
LINE 4:  SET "count" = "count" + 1
                       ^
SQL state: 42702
Character: 107
Run Code Online (Sandbox Code Playgroud)

sql postgresql upsert

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

基于具有 NULL 值的 UNIQUE 约束的 UPSERT

我有一个 Postgres 表,对多个列有唯一约束,其中一列可以为 NULL。我只希望每个组合都允许该列中的一条记录为 NULL。

create table my_table (
   col1 int generated by default as identity primary key,
   col2 int not null,
   col3 real,
   col4 int,
   constraint ux_my_table_unique unique (col2, col3)
);
Run Code Online (Sandbox Code Playgroud)

我有一个 upsert 查询,当它遇到 col2、col3 中具有相同值的记录时,我想更新 col4:

insert into my_table (col2, col3, col4) values (p_col2, p_col3, p_col4)
on conflict (col2, col3) do update set col4=excluded.col4;
Run Code Online (Sandbox Code Playgroud)

但当 col3 为 NULL 时,冲突不会触发。我读过有关使用触发器的内容。请问,引发冲突的最佳解决方案是什么?

sql postgresql null unique upsert

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

使用子查询和 ON CONFLICT 进行 INSERT INTO

我想将 JSON 数组中的所有元素插入到表中:

INSERT INTO local_config(parameter, value)
SELECT json_extract(j.value, '$.parameter'), json_extract(j.value, '$.value')
FROM json_each(json('[{"parameter": 1, "value": "value1"}, {"parameter": 2, "value": "value2"}]')) AS j
WHERE value LIKE '%'
ON CONFLICT (parameter) DO UPDATE SET value = excluded.value;
Run Code Online (Sandbox Code Playgroud)

到目前为止这有效,但我真的需要这个WHERE value LIKE '%'条款吗?

当我删除它时:

INSERT INTO local_config(parameter, value)
SELECT json_extract(j.value, '$.parameter'), json_extract(j.value, '$.value')
FROM json_each(json('[{"parameter": 1, "value": "value1"}, {"parameter": 2, "value": "value2"}]')) AS j
ON CONFLICT (parameter) DO UPDATE SET value = excluded.value;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

[SQLITE_ERROR] SQL error or missing database (near …
Run Code Online (Sandbox Code Playgroud)

sqlite upsert on-clause sql-update sql-insert

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

Mongoose Upsert,语法错误

我遇到了使用Mongoose问题的问题.它说语法无效,unexpected token "."最后一行说.但我无法理解究竟是什么问题.我一直在研究它超过一个小时,我错过了一个简单的概念吗?

var seriesSchema = new Schema({
    type : {type: Number, default: 1},
    features: {
        tvdb_id: {type: Number, unique: true},
        ....
    },
    created : {type: Date}
});

var SeriesModel = mongoose.model('Series', seriesSchema);

var instance = new SeriesModel();                   
// Setting instance properties to some values
SeriesModel.update({features.tvdb_id : serieData.id}, instance, {upsert: true}); 
Run Code Online (Sandbox Code Playgroud)

upsert mongoose mongodb node.js

0
推荐指数
1
解决办法
1090
查看次数

UPSERT测试代码中的语法错误

我正在尝试使用以下测试代码来测试新的PostgreSQL upsert语法,但是出现语法错误:

test=> CREATE TABLE test1 (
test(>         key1 integer PRIMARY KEY check (key1 > 0),
test(>         key2 integer check (key2 > 0)
test(> );
CREATE TABLE

test=> CREATE OR REPLACE FUNCTION upsert(IN in_json_array jsonb)
test->         RETURNS void AS
test-> $func$
test$>         UPDATE test1 t SET     
test$>         t.key1 = (obj->>'key1')::int,
test$>         t.key2 = (obj->>'key2')::int
test$>         FROM JSONB_ARRAY_ELEMENTS(in_json_array) obj
test$>         WHERE  t.key1 = obj->'key1'
test$>         ON CONFLICT DO UPDATE SET
test$>         key1 = excluded.key1,
test$>         key2 = excluded.key2;
test$> 
test$> …
Run Code Online (Sandbox Code Playgroud)

postgresql insert upsert postgresql-json postgresql-9.5

0
推荐指数
1
解决办法
1716
查看次数

根据Postgres 10中JSON的特定值执行UPSERT

我有一个 Postgres 表messages如下:

Column   |           Type             | Collation | Nullable |                    
-----------+--------------------------+-----------+----------
 id        | integer                  |           | not null |
 message   | jsonb                    |           |          | 
 date      | timestamp with time zone |           | not null | 
Run Code Online (Sandbox Code Playgroud)
id | message                      | date
1  | {"name":"alpha", "pos":"x"}  | 2020-02-11 12:31:44.658667+00
2  | {"name":"bravo", "pos":"y"}  | 2020-02-11 12:32:43.123678+00
3  | {"name":"charlie", "pos":"z"}| 2020-02-11 12:38:37.623535+00
Run Code Online (Sandbox Code Playgroud)

我想做的是根据name键的值执行 UPSERT,即,如果存在具有相同值的插入name,则更新另一个值pos,否则创建一个新条目。

我做到了CREATE UNIQUE INDEX message_name ON messages((message->>'name'));

我在 …

sql postgresql json upsert postgresql-10

0
推荐指数
1
解决办法
565
查看次数

如何在 Postgres 中使用 upsert

我想将 Postgres 中的这段代码转换为更短的代码,以实现相同的效果。我读过有关 upsert 的内容,但我不明白在我的代码上实现它的好方法。我写的很好,但我想找到一种更优雅的方式来编写它。希望这里有人可以帮助我!这是查询:

CREATE OR REPLACE FUNCTION insert_table(
    in_guid    character varying,
    in_x_value character varying,
    in_y_value character varying
)
RETURNS TABLE(response boolean) LANGUAGE 'plpgsql'

DECLARE _id integer;

BEGIN
    -- guid exists and it's been 10 minutes from created_date:
    IF ((SELECT COUNT (*) FROM public.tbl_client_location WHERE guid = in_guid AND created_date < NOW() - INTERVAL '10 MINUTE') > 0) THEN
        RETURN QUERY (SELECT FALSE);
    
    -- guid exists but 10 minutes hasen't passed yet:
    ELSEIF ((SELECT COUNT (*) FROM public.tbl_client_location WHERE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql upsert

0
推荐指数
1
解决办法
1152
查看次数

MYSQL 更新或用 PHP 插入

我需要更新数据库中的一条记录,但我不知道该记录是否已经存在。如果存在,更新它,否则插入它。现在我想出了这个代码:

1: <?php
2: $query = "UPDATE user_meta SET active = '0' WHERE user_id = '125'";
3: $mysqli->query($query);
4: 
5: if($mysqli->affected_rows == 0){
6:     $query = "INSERT INTO user_meta (user_id, active) VALUES ('125', 0)";
7:     $mysqli->query($query);
8: }
Run Code Online (Sandbox Code Playgroud)

桌子:

CREATE TABLE `user_meta` (
  `user_id` int(11) DEFAULT NULL,
  `active` tinyint(4) DEFAULT NULL,
  UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

这段代码对我来说工作正常,但它实际上产生了一个我忽略的错误。

问题出在这一行5。受影响的行是0如果没有任何更改,即使记录已经存在。但这会触发 INSERT 语句。这个失败是因为 user_id 字段是唯一的,现在我忽略了这一点,所以我的代码工作正常。

但这是要走的路吗?或者我应该先选择然后更新或插入?

php mysql sql upsert

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

在插入SQL Server中使用if条件

我的代码中有以下声明

INSERT INTO #TProductSales (ProductID, StockQTY, ETA1) 
VALUES (@ProductID, @StockQTY, @ETA1)
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

IF @ProductID exists THEN 
   UPDATE #TProductSales 
ELSE 
   INSERT INTO #TProductSales
Run Code Online (Sandbox Code Playgroud)

有没有办法可以做到这一点?

t-sql sql-server upsert

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