为什么自动递增返回错误的值

时间:2019-05-16 15:39:45

标签: c# postgresql npgsql

我在下面的冲突中插入了一个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 ..以此类推。

我错过了什么?

0 个答案:

没有答案