使用Sqitch Rework命令更改表

Da *_*Kid 4 postgresql sqitch

我已经尝试了几次以遵循Sqitch的postgres教程 ”,只是除了更改功能(使用CREATE OR REPLACE FUNCTION)之外,我还更改了表中的字段名称,以查看部署后它将如何锻炼。但是最终出现以下错误。有人可以指出我正确的方向吗?

$ sqitch verify
Verifying sqtest_db
  * appschema .... ok
  * contact ...... ok
Undeployed change:
  * contact
Verify successful


$ sqitch deploy
Deploying changes to sqtest_db
  + contact .. psql:deploy/contact.sql:10: ERROR:  relation "contact" already exists
not ok
"/usr/local/bin/psql" unexpectedly returned exit value 3

Deploy failed
Run Code Online (Sandbox Code Playgroud)

这是我之前tagged和之后tagged部署查询

在标记数据库之前

BEGIN;
CREATE TABLE sq_schema.contact
  (
    log_date DATE NOT NULL,
    emp_name CHARACTER VARYING(100) DEFAULT ''
  );
COMMIT;
Run Code Online (Sandbox Code Playgroud)

用标记数据库

sqitch rework contact --requires appschema -n 'Added CONTACT table'
Run Code Online (Sandbox Code Playgroud)

标记后

BEGIN;

CREATE TABLE sq_schema.contact
  (
    log_date DATE NOT NULL,

    -- Change field name,
    employee_name CHARACTER VARYING(100) DEFAULT ''
  );

COMMIT;
Run Code Online (Sandbox Code Playgroud)

the*_*ory 8

返工旨在进行幂等的更改,例如CREATE OR REPLACE FUNCTION。该CREATE TABLE声明不是幂等的。如果要将列添加到表中,建议使用以下两种方法之一:

  1. 如果尚未发布数据库,则只需修改CREATE TABLE原始更改中的语句,然后sqitch rebase还原所有更改并重新部署更新后的表即可。这是进行开发时的理想选择。

  2. 否则,添加一个名为$table_$column或类似名称的新更改,并使用一条ALTER TABLE语句添加新列。如果您已经发布了数据库,则可以采用这种方法,但是如果您愿意,也可以在发布之前进行操作。