我已多次尝试关注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
这是我之前的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;
答案 0 :(得分:4)
返工旨在进行idempotent更改,例如CREATE OR REPLACE FUNCTION
。 CREATE TABLE
语句不是幂等的。如果要向表中添加列,我建议:
如果您尚未发布数据库,只需修改原始更改中的CREATE TABLE
语句和sqitch rebase
以还原所有更改并使用更新的表重新部署。这是开发时的理想选择。
否则,添加名为$table_$column
或其他类似的新更改,并使用ALTER TABLE
语句添加新列。如果您已经发布了数据库,这是采取的方法,但如果您愿意,也可以在发布之前执行此操作。