当前位置: 首页 > 知识库问答 >
问题:

分解:在已有数据的表中添加自动增量列

艾心远
2023-03-14

嗨,伙计们,我对液化有点怀疑

我创建了一个带有经典变更集的表(PostgreSQL)

<changeSet id="create_table">
    <createTable tableName="table" schemaName="schema">
        <column name="name" type="varchar">
            <constraints nullable="false"/>
        </column>
        <column name="surname" type="varchar">
            <constraints nullable="false"/>
        </column>
    </createTable>
</changeSet>

我已经在这个表中添加了一些数据。我想添加一个新列“id”,并将其作为主键作为自动增量列。我该怎么做?

因为如果我尝试添加这样的变更集:

<changeSet id="added_pk">
    <addColumn tableName="table"
               schemaName="schema">
        <column name="id" type="bigint">
            <constraints unique="true" nullable="false" uniqueConstraintName="PK_TABLE_ID"/>
        </column>
    </addColumn>
    <addAutoIncrement columnDataType="bigint"
                      columnName="id"
                      tableName="table"
                      schemaName="schema"
                      incrementBy="1" startWith="1"/>
</changeSet>

运行脚本时出现错误:“关系“table”的列“id”包含空值”。这取决于已经存在的值。我该如何应对这种情况?(我宁愿避免在添加新列之前截断所有数据)

谢谢!当做

共有1个答案

宇文温文
2023-03-14

重命名数据库中的当前表。删除liquibase变更日志。重新运行包含新id字段的liquibase文件(可以组合这两个变更集,这样还可以确定id字段的位置)。创建新表后,可以将旧表中的数据传输到新表中。这样,来自旧表的数据将自动接收ID。删除末尾的旧表。

 类似资料:
  • 问题内容: 我想向具有数据的现有表中添加一个新的自动增量主列。我怎么做? 我先添加了一个列,然后尝试添加一个序列,此后,我迷失了如何插入该列并将其作为主键。 问题答案: 假设您的表被调用t1,您的主键被称为idFirst,创建序列: 然后创建一个触发器,该触发器在插入时增加:

  • 我正在尝试使用现有主键将自动递增id添加到现有表中 这是我的密码 表代码的初始迁移 将自动增量ID添加到现有表代码 我试图做的是向这个现有表添加一个自动递增的id,但它给了我这个错误 有人能帮帮我吗?我不想删除表的主键,我只想添加另一个自动递增的id,它不是主键,但可以是唯一键

  • 问题内容: 我需要创建一个基本上只保留索引列表的表。因此,我创建了一个表,其中只有一个自动递增的列,称为“ id”。但是,我似乎无法向该表隐式添加自动递增的值。 我知道通常在表中有这样一列(不仅有此列)时,您可以执行以下操作: 插入表(col1,col2 …)值(val1,val2 …) 而且,如果您不指定自动递增的列,它将自动获取一个值。但是,类似: 插入表()值()插入表插入表() 等等。所有

  • 问题内容: 使用Postgres,我试图用SQL自动编号主键。但是,这给了我一个错误。 错误: 知道为什么吗? 问题答案: Postgres 10或更高版本 列(请参见下文)保持不变。但是考虑一个 专栏。Postgres10实现了此标准SQL功能。 手册中的基本语法和信息。 __用列 创建 表 将 列 添加 到现有表 表可能填充也可能不填充行。 同时使它成为PK(表还不能拥有PK): 有关的: 如

  • 如何在Laravel迁移和存在表中添加列自动增量,但不是主键,它的主键是。我使用Laravel 5.7和pgsql。

  • 问题内容: 我的数据库带有表test1。它具有一个主要ID“ Id”,该ID是自动递增的。现在,id的格式为1,2,3。是否可以将主要ID存储为PNR1,PNR2,PNR3…。。等等(自动递增)。 问题答案: 否。可以在查询中添加前缀,也可以使用视图。