使用 Sqitch Rework 命令更改 Table

Altering Table with Sqitch Rework command

我已经多次尝试遵循 Sqitch's 'postgres tutorial',只是我没有更改函数(使用 CREATE OR REPLACE FUNCTION),而是更改了 [=29= 中的字段名称] 以查看部署后它将如何运行。但它最终出现以下错误。有人能给我指出正确的方向吗?

$ 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

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

在标记数据库之前

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

标记数据库
sqitch rework contact --requires appschema -n 'Added CONTACT table'

标记后

BEGIN;

CREATE TABLE sq_schema.contact
  (
    log_date DATE NOT NULL,

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

COMMIT;

返工旨在进行 idempotent 更改,例如 CREATE OR REPLACE FUNCTIONCREATE TABLE 语句不是幂等的。如果您想向 table 添加一列,我建议:

  1. 如果你还没有发布你的数据库,只需修改原始更改中的CREATE TABLE语句和sqitch rebase以恢复所有更改并使用更新后的[=30=重新部署].这是做开发的理想选择。

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