Sequelize - 使用索引和放大器重命名列约束

时间:2017-12-11 14:40:21

标签: migration sequelize.js

我希望使用Sequelize创建迁移,使用camelCase重命名列,以使数据库具有snake_case中的列。

我使用Sequelize创建迁移并使用迁移。

---

execution:
- iterations: 2
  concurrency: 1000
  ramp-up: 20m

  scenarios:

   ping:
    requests:
    - url: http://127.0.0.1:12121/ping/
      method: POST
      label: ping
      body-file: ./vars/"{{ping}}"
      headers:
        Content-Type: application/json
      parameters:
        - /debian/ping.json
        - /ubuntu/ping.json
        - /centos7/ping.json

   changeHostname:
    requests:
    - url: http://127.0.0.1:12121/changeHostname/
      method: POST
      label: ping
      body-file: ./vars/"{{change_hostname}}"
      headers:
        Content-Type: application/json
      parameters:
        - /debian/hostnameDto.json
        - /ubuntu/hostnameDto.json
        - /centos7/hostnameDto.json

   changeRootPassword:
    requests:
    - url: http://127.0.0.1:12121/changeRootPassword/
      method: POST
      label: ping
      body-file: ./varss/"{{change_root_password}}"
      headers:
        Content-Type: application/json
      parameters:
        - /debian/changeRootPasswordDto.json
        - /ubuntu/changeRootPasswordDto.json
        - /centos7/changeRootPasswordDto.json

reporting:
  - module: console
  - module: final-stats

settings:
  check-interval: 5s
  default-executor: jmeter

provisioning: local

但是......我对此列(totoId)和名称列有一个唯一约束,名为 my_some_table_name_totoId_uindex ,我在此列上也有索引(totoId)。

如何强制重命名具有唯一约束和一个索引的列?

1 个答案:

答案 0 :(得分:2)

您必须删除所有约束,重命名该列,然后再添加约束。在totoId上有一个约束,它看起来像这样:

// 1) drop constraint
queryInterface.removeConstraint('my_some_table', 'my_constraint');

// 2) rename column
queryInterface.renameColumn('my_some_table', 'totoId', 'toto_id');

// 3) add constraint back
queryInterface.addConstraint('my_some_table', ['toto_id'], {
    type: 'unique',
    name: 'my_constraint'
});

请记住,迁移应该是原子操作。因此,您应该按顺序创建3次迁移。