我已经尝试了几次以遵循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)
返工旨在进行幂等的更改,例如CREATE OR REPLACE FUNCTION。该CREATE TABLE声明不是幂等的。如果要将列添加到表中,建议使用以下两种方法之一:
如果尚未发布数据库,则只需修改CREATE TABLE原始更改中的语句,然后sqitch rebase还原所有更改并重新部署更新后的表即可。这是进行开发时的理想选择。
否则,添加一个名为$table_$column或类似名称的新更改,并使用一条ALTER TABLE语句添加新列。如果您已经发布了数据库,则可以采用这种方法,但是如果您愿意,也可以在发布之前进行操作。
| 归档时间: |
|
| 查看次数: |
842 次 |
| 最近记录: |