7

我已经尝试过几次遵循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

这是我部署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;
4

1 回答 1

16

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

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

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

于 2016-01-29T18:52:14.950 回答