使用Sqitch Rework命令更改表

时间:2016-01-29 14:11:24

标签: postgresql sqitch

我已多次尝试关注Sqitch's' postgres tutorial',只是改为不改变功能(使用CREATE OR REPLACE FUNCTION),I& #39;更改表格中的字段名称,以了解部署后如何进行锻炼。但它最终会出现以下错误。有人可以指出我正确的方向吗?

$ 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

这是我之前的taggedtagged部署查询

之后

在标记数据库之前

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;

1 个答案:

答案 0 :(得分:4)

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

  1. 如果您尚未发布数据库,只需修改原始更改中的CREATE TABLE语句和sqitch rebase以还原所有更改并使用更新的表重新部署。这是开发时的理想选择。

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