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

Database 在django中创建自定义pgsql类型的正确方法,database,django,postgresql,django-syncdb,django-evolution,Database,Django,Postgresql,Django Syncdb,Django Evolution,为django应用程序创建自定义pgsql类型的正确方法是什么,以便每次使用syncdb创建数据库时,在创建任何表之前创建所有自定义类型(以便表可以使用此类型) 我也使用django evolution,但这不是一个合适的解决方案-它在syncdb之后运行。我可以想象做一个变通方法,比如用标准字段类型定义模型,然后在演进中创建类型和更改列类型,但这肯定不好,而且有点晦涩 有什么想法吗?我认为在Django没有办法做到这一点。您可能知道,有一个post\u syncdb信号,但是pre\u syn

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

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


有什么想法吗?

我认为在Django没有办法做到这一点。您可能知道,有一个
post\u syncdb
信号,但是
pre\u syncdb
没有信号

因此,我认为只有两种选择:黑客
pre_syncdb
将信号发送到Django或使用类似的自动化工具

破解您自己的
pre_syncdb
信号,即使这是正确的方法,也可能并不简单,您必须在每个新的Django版本中维护补丁

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

例如,我的文件的一部分如下所示:

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')
或:


要在环境中列出的所有名为
cluster

的计算机上运行该命令,我认为Django中没有这样做的方法。您可能知道,有一个
post\u syncdb
信号,但是
pre\u syncdb
没有信号

因此,我认为只有两种选择:黑客
pre_syncdb
将信号发送到Django或使用类似的自动化工具

破解您自己的
pre_syncdb
信号,即使这是正确的方法,也可能并不简单,您必须在每个新的Django版本中维护补丁

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

例如,我的文件的一部分如下所示:

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')
或:


要在您的环境中列出的所有名为
cluster

的计算机上运行该命令,我考虑过攻击pre_syncdb,实际上我可以将其作为补丁提交。我也在使用我自己的git repo for django,所以我可以毫无问题地维护我的补丁集,直到它们成为主流。。。我只是想也许还有别的办法,但显然没有。。pre_syncdb看起来很自然,所以我可能会选择它。我不是Django开发人员,所以我的答案不能是权威的。他们没有pre_syncdb信号可能有很好的原因,也可能有另一种方法。在进行任何编码之前,我会在django-dev邮件列表上询问这个问题。是的,我考虑过入侵pre_-syncdb——实际上我可以将其作为补丁提交。我也在使用我自己的git repo for django,所以我可以毫无问题地维护我的补丁集,直到它们成为主流。。。我只是想也许还有别的办法,但显然没有。。pre_syncdb看起来很自然,所以我可能会选择它。我不是Django开发人员,所以我的答案不能是权威的。他们没有pre_syncdb信号可能有很好的原因,也可能有另一种方法。在进行任何编码之前,我会在django-dev邮件列表上询问这个问题。