如何修改postgres数据库中的json字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改postgres数据库中的json字段相关的知识,希望对你有一定的参考价值。

参考技术A 如何修改postgres数据库中的json字段
postgre
修改字段属性的sql语句怎么写
alter
table
table1
ALTER
COLUMN
column4
varchar(100);

在 django 数据模型中,有没有办法为存储在 postgres 表中的每个 json 属性创建一个数据字段?

【中文标题】在 django 数据模型中,有没有办法为存储在 postgres 表中的每个 json 属性创建一个数据字段?【英文标题】:In a django data model, is there any way to create a data field for each json attribute stored in a postgres table? 【发布时间】:2015-08-28 20:13:42 【问题描述】:

假设我有以下 Postgres 表,其中包含一个包含 json 值的列:

    +----+-------------------------------------------------+
    | id |                     record                      |
    +----+-------------------------------------------------+
    |  1 | "0":"1st value","1":"a value","2":"I value"   |
    |  2 | "0":"2nd value","1":"b value","2":"II value"  |
    |  3 | "0":"3rd value","1":"c value","2":"III value" |
    |  4 | "0":"4th value","1":"d value","2":"IV value"  |
    +----+-------------------------------------------------+

我想为这个表创建一个 django 数据模型,其中每个 json 属性都有一个字段。像这样的:

    class RecordTable(models.Model):
        id = models.IntegerField(primary_key=True)
        zero = models.TextField(db_column='record->\'0\'')
        one = models.TextField(db_column='record->\'1\'')
        two = models.TextField(db_column='record->\'2\'')

        class Meta:
            db_table = 'record_table'

这很接近,但不会生成我想要的那种查询。由于处理列名的方式,Django 最终会生成如下所示的 select 语句:

    SELECT DISTINCT "record_table"."record->'0'" FROM "record_table" ...

当我真的希望生成的查询看起来像这样时(注意 record->'0' 周围缺少引号):

    SELECT DISTINCT "record_table".record->'0' FROM "record_table" ...

我查看了关于自定义字段和自定义管理器的文档,但我没有找到任何可以让我将 json 值拆分为多个数据字段的功能。这可能吗?如果是这样,我将如何去做这样的事情?

【问题讨论】:

【参考方案1】:

Django 1.8 有一个 HStoreField,您可能会觉得它很有用,而 Django 1.9 将有一个 JSONField

但是,我认为让多个 Django 字段引用表中的同一列是不可行的。

【讨论】:

以上是关于如何修改postgres数据库中的json字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Postgres 中的 JSON 字段上创建索引?

JSON字段postgres喜欢

Django 和 postgres - 在模型字段中将数据存储为 json 的缺点

从 Greenplum 中的 JSON 中删除 NULL 字段

Postgres选择包含json的json数组中的位置

索引扫描不适用于 postgres 中的 json 数据集