相关疑难解决方法(0)

使用Alembic更改Enum字段

当使用早于9.1的PostgreSQL版本(为枚举添加ALTER TYPE)时,如何在alembic迁移中向Enum字段添加元素?这个 SO问题解释了直接过程,但我不太确定如何使用alembic进行翻译.

这就是我所拥有的:

new_type = sa.Enum('nonexistent_executable', 'output_limit_exceeded',
                   'signal', 'success', 'timed_out', name='status')
old_type = sa.Enum('nonexistent_executable', 'signal', 'success', 'timed_out',
                   name='status')
tcr = sa.sql.table('testcaseresult',
                   sa.Column('status', new_type, nullable=False))


def upgrade():
    op.alter_column('testcaseresult', u'status', type_=new_type,
                    existing_type=old_type)


def downgrade():
    op.execute(tcr.update().where(tcr.c.status==u'output_limit_exceeded')
               .values(status='timed_out'))
    op.alter_column('testcaseresult', u'status', type_=old_type,
                    existing_type=new_type)
Run Code Online (Sandbox Code Playgroud)

不幸的是,上面只ALTER TABLE testcaseresult ALTER COLUMN status TYPE status在升级时产生,基本上什么也没做.

python postgresql sqlalchemy alembic

39
推荐指数
6
解决办法
2万
查看次数

如何在postgresql中更改类型和删除值

我找到了如何增加价值TYPE.但是我怎样才能从中消除价值呢?
例如,我有TYPEenum价值观('A','B','C').怎么删除'C'

postgresql postgresql-9.2

15
推荐指数
3
解决办法
1万
查看次数

如何为 Postgresql 编写向下迁移,其中向上迁移添加枚举值?

我想通过添加新的枚举值来扩展我的枚举类型。这非常简单。我还将所有 SQL 保留在迁移中,并将每个向上迁移与对称向下迁移配对,将架构恢复到之前的状态。

\n\n

但是,不支持反向操作 \xe2\x80\x94 从枚举 \xe2\x80\x94 中删除变体

\n\n

这方面的常用方法是什么?我可以看到两个选项:

\n\n
    \n
  1. 编写“向上”迁移if not exists,并在“向下”迁移中不执行任何操作。我不喜欢这个选项,因为它违反了这样的假设:应用和恢复迁移会使架构保持与之前相同的状态。
  2. \n
  3. 在“向下”迁移中转换为新的枚举类型,如上面链接的问题中所述 \xe2\x80\x94 对于这样一个简单的操作来说似乎有点过分了。
  4. \n
\n

postgresql enums database-migration

6
推荐指数
1
解决办法
1575
查看次数

在 postgres 中删除单个枚举值

假设我有以下枚举:

CREATE TYPE "my_enum" AS ENUM('value1', 'value2', 'value3');
Run Code Online (Sandbox Code Playgroud)

我想要删除value3。从我在文档和以前的线程中看到的内容来看,我实际上必须删除整个枚举并使用我想要的值重新创建它。像这样的东西:

DROP TYPE IF EXISTS "my_enum";

CREATE TYPE "my_enum" AS ENUM('value1', 'value2');
Run Code Online (Sandbox Code Playgroud)

问题是我有其他依赖于这个枚举的表,所以它不允许我这样做。我收到以下消息(理所当然):

错误:无法删除类型“my_enum”,因为其他对象依赖于它

所以我的问题是如何在不删除整个内容的情况下删除一个枚举值?我知道我可以通过更改以下内容轻松添加值:

ALTER TYPE "my_enum" ADD VALUE 'value4';
Run Code Online (Sandbox Code Playgroud)

所以我认为我可以在删除时做一些等效的事情。

谢谢!

postgresql enums postgresql-9.5

4
推荐指数
2
解决办法
3067
查看次数

列"xxxx"的默认值无法自动转换为在Postgres DB中键入boolean

我试图将brs.parts表中的列从字符变为boolean更新.到目前为止,该列的数据为Y/N. 我正在使用以下命令

ALTER TABLE brs.parts ALTER COLUMN is_dpm_scanned TYPE BOOLEAN USING is_dpm_scanned::BOOLEAN
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

*********错误**********

ERROR: default for column "is_dpm_scanned" cannot be cast automatically to type boolean
SQL state: 42804
Run Code Online (Sandbox Code Playgroud)

表定义是:

CREATE TABLE brs.parts (
    id serial NOT NULL PRIMARY KEY,
    webcrt_part_id INTEGER,
    event_id INTEGER,
    webcrt_job_id INTEGER,
    incoming_serial_number CHARACTER VARYING(256),
    outgoing_serial_number CHARACTER VARYING(256), 
    part_number CHARACTER VARYING(256),
    tag_number NUMERIC,
    is_dpm_scanned CHARACTER VARYING(1) DEFAULT 'N'::CHARACTER VARYING,
    current_operation_id INTEGER,
    creation_date DATE,
    created_by CHARACTER VARYING(20) NOT NULL,
    last_updated_date DATE,
    last_updated_by CHARACTER VARYING(20) NOT NULL,
    is_delete …
Run Code Online (Sandbox Code Playgroud)

postgresql

3
推荐指数
1
解决办法
6526
查看次数