在django中创建自定义pgsql类型的正确方法

时间:2009-06-29 04:17:49

标签: database django postgresql django-syncdb django-evolution

为django应用程序创建自定义pgsql类型的正确方法是什么,以便每次使用syncdb创建数据库时,在创建任何表之前创建所有自定义类型(以便表可以使用此类型)?

我也使用django-evolution,但这不是一个合适的解决方案 - 它在syncdb之后运行。我可以想象做一个解决方法,比如用标准字段类型定义模型,然后在演化中创建类型和改变列类型,但这绝对不是很好,有点模糊......

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不相信在Django中有办法做到这一点。您可能知道,有一个post_syncdb信号,但pre_syncdb没有信号。

所以我认为只有两个选择:将pre_syncdb信号发送到Django或使用像Fabric这样的自动化工具。

攻击你自己的pre_syncdb信号,即使这是正确的方法,可能也不会很简单,你必须在每个新的Django版本中维护补丁。

另一方面,不仅像Fabric这样的自动化工具很简单,而且它为您的项目提供了其他好处。

例如,我的Fabfile的一部分看起来像:

def createdb():
    "Create a clean database"
    run('createdb --encoding=UNICODE $(db_name) -O $(db_owner) -U $(db_owner)')
    run('python manage.py syncdb --noinput')

在syncdb之前添加类似的内容:

run('psql -U $(db_owner) $(db_name) < app/sql/custom_types.sql')

你只需输入以下内容就可以了:

$ fab createdb

或:

$ fab cluster createdb

在您的环境中列出的名为cluster的所有计算机上运行该命令。

相关问题