首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Sqitch返工命令修改表

用Sqitch返工命令修改表
EN

Stack Overflow用户
提问于 2016-01-29 14:11:24
回答 1查看 2.3K关注 0票数 7

我已经尝试过几次遵循斯奇奇氏病 'postgres教程',除了没有修改一个函数(它使用CREATE OR REPLACE FUNCTION)之外,我正在表中更改字段名,以查看部署后它将如何运行。但结果却是下面的错误。谁能帮我指出正确的方向吗?

代码语言:javascript
复制
$ 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部署查询

在标记DB之前

代码语言:javascript
复制
BEGIN;
CREATE TABLE sq_schema.contact
  (
    log_date DATE NOT NULL,
    emp_name CHARACTER VARYING(100) DEFAULT ''
  );
COMMIT;

代码语言:javascript
复制
sqitch rework contact --requires appschema -n 'Added CONTACT table'

标记后

代码语言:javascript
复制
BEGIN;

CREATE TABLE sq_schema.contact
  (
    log_date DATE NOT NULL,

    -- Change field name,
    employee_name CHARACTER VARYING(100) DEFAULT ''
  );

COMMIT;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-29 18:52:14

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

  1. 如果尚未释放数据库,只需修改原始更改中的CREATE TABLE语句和sqitch rebase,以恢复所有更改并使用更新的表重新部署。在进行开发时,这是非常理想的。
  2. 否则,添加名为$table_$column之类的新更改,并使用ALTER TABLE语句添加新列。如果您已经发布了数据库,则可以采用这一方法,但如果您愿意,也可以在发布之前完成。
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35086596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档