PostgreSQL 为什么序列只增加一次有两个 "nextval"

PostgreSQL Why sequence increases only once with two "nextval"

我正在实现一个带有评论功能的看板。

我用 nextval

创建了一个像这样的 table
create table tr_board
(
    b_id varchar(20) not null default nextval('seq_board'),
    title varchar(256),
    content varchar(500),
    user_id varchar(30),
    update_date timestamp not null,
    is_complete varchar(1) default 0,
    is_private varchar(1) default 0
);


这是我的插入 sql。

    <insert id="addBoard" parameterType="java.util.HashMap">
        <selectKey keyProperty="id" resultType="int" order="BEFORE">
            select nextval('seq_board') as id;
        </selectKey>

        insert into tr_board
            (
                b_id,
                title,
                content,
                user_id,
                is_private,
                update_date
            )
        values
            (
                #{id},
                #{title},
                #{content},
                #{user_id},
                #{is_private},
                current_timestamp at time zone 'utc'
            )
    </insert>

我在"create"和"insert"的"default"中使用了nextval
所以我认为序列会增加两倍。
但是为什么序列只增加一次,即使总共有两个 nextval 存在?


非常感谢您的回复。

仅当未提供值或您明确要求使用默认值时,默认列上的 nextval() 才会被调用。您正在获取一个序列值,然后将其作为值传递给 b_id 列,因此它不会尝试获取序列中的下一个值,因为不需要默认值。如果你得到值,它只会调用它两次,然后什么也不做,需要使用默认值。