小编Sem*_*ZEN的帖子

Postgres 序列的last_value 字段无法按预期工作

我在 postgres 中有一个表,其主键是使用序列分配的(我们称之为“a_seq”)。该序列用于递增值并将当前值作为正在插入的记录的主键插入。

我用于序列的代码:

CREATE SEQUENCE public.a_seq
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    CACHE 1;

ALTER SEQUENCE public.AssembleTable_RowId_seq OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)

我正在尝试从磁盘复制文件并将有关复制文件的信息插入到表中。磁盘中存在同名文件,因此我使用以下查询从序列中检索“last_value”:

SELECT last_value FROM a_seq;
Run Code Online (Sandbox Code Playgroud)

并重命名文件“_”,然后将其插入数据库,以便文件名和该文件的主键(id)一致,如下所示:

id | fileName                         
1  | 1_asd.txt
Run Code Online (Sandbox Code Playgroud)

但是当我插入记录时,id 始终比从查询中获取的“last_value”大 1 个值,因此表如下所示:

id | fileName                         
2  | 1_asd.txt
Run Code Online (Sandbox Code Playgroud)

我尝试多次执行上面的选择查询来检查它是否增加了值,但事实并非如此。
知道如何在插入之前获取分配给记录的值吗?

注意:我使用 MATLAB,这是用于插入的代码:

colnames = {'DataType'         , ...
            'FilePath'         , ...
            'FileName'         , ...
            'FileVersion'      , ...
            'CRC32Q'           , ...
            'InsertionDateTime', ...
            'DataSource'       };

data = {FileLine{5}  ,... % DataType
        tempPath     ,... % FilePath …
Run Code Online (Sandbox Code Playgroud)

postgresql primary-key sequence auto-increment

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