使用 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 FUNCTION
。 CREATE TABLE
语句不是幂等的。如果您想向 table 添加一列,我建议:
如果你还没有发布你的数据库,只需修改原始更改中的CREATE TABLE
语句和sqitch rebase
以恢复所有更改并使用更新后的[=30=重新部署].这是做开发的理想选择。
否则,添加一个新的更改,命名为 $table_$column
或类似的名称,并使用 ALTER TABLE
语句添加新列。如果您已经发布了数据库,则可以采用这种方法,但如果您愿意,也可以在发布之前执行此操作。
我已经多次尝试遵循 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 FUNCTION
。 CREATE TABLE
语句不是幂等的。如果您想向 table 添加一列,我建议:
如果你还没有发布你的数据库,只需修改原始更改中的
CREATE TABLE
语句和sqitch rebase
以恢复所有更改并使用更新后的[=30=重新部署].这是做开发的理想选择。否则,添加一个新的更改,命名为
$table_$column
或类似的名称,并使用ALTER TABLE
语句添加新列。如果您已经发布了数据库,则可以采用这种方法,但如果您愿意,也可以在发布之前执行此操作。