我在下面的冲突中插入了一个PostgreSQL:
Select setval('test_pid_seq', MAX(pid), true) From test;
INSERT INTO test ( area ) VALUES ( 'a3' )
ON CONFLICT (area) do update set last_update=current_timestamp
RETURNING pid;
我通过使用pgadmin进行了测试,它可以按预期工作(返回pid对于插入和更新均正确)
但是使用下面的我的C#代码:
string _sql = "Select setval('test_pid_seq', MAX(pid), true) From test;" +
"INSERT INTO test(area) VALUES(@Area) " +
"ON CONFLICT (area) do update set last_update =
current_timestamp " +
"RETURNING pid; ";
_ret = await _conn.ExecuteScalarAsync<long>(_sql, new { Area = _area });
我尝试在pgadmin中执行以下操作:
截断表测试; 更改序列test_pid_seq以1重新启动;
在运行代码之前,我希望它返回pid = 1但返回0。.
尝试添加更多记录,但是返回pid值始终是我期望的pid值-1,因此例如: 如果应该返回1,则返回0,如果应该返回2,则返回1 ..以此类推。
我错过了什么?