caminho certo para criar tipos pgsql personalizados no Django
-
20-08-2019 - |
Pergunta
O que é a maneira correta de criar tipos de costume pgsql para Django aplicativo para que cada banco de dados de tempo é criado com syncdb, todos os tipos personalizados são criados antes de criar todas as tabelas (de modo que as tabelas podem usar esse tipo)?
Eu também uso django-evolution, mas isso não é uma solução adequada - ele é executado após syncdb. Eu posso imaginar fazendo uma solução alternativa como definir modelos com tipos de campo padrão e, em seguida, a criação de tipos e tipos de colunas alterando em evoluções, mas isso definitivamente não é agradável e tipo de obscuro ...
Qualquer idéia?
Solução
Eu não acredito que há uma maneira de fazer isso no Django. Como você provavelmente sabe, há um sinal post_syncdb
mas nenhum sinal para pre_syncdb
.
Então, eu acho que há apenas duas opções: corte de sinal pre_syncdb
em Django ou usar uma ferramenta de automação como Tecido .
Hacking seu próprio sinal pre_syncdb
, mesmo que seja o caminho certo para fazer isso, provavelmente não vai ser simples e você tem que manter o patch cada nova versão Django.
Por outro lado, não é apenas uma ferramenta de automação como a tela simples, mas oferece outros benefícios para o seu projeto.
Como um exemplo, uma parte dos meus Looks Fabfile como:
def createdb():
"Create a clean database"
run('createdb --encoding=UNICODE $(db_name) -O $(db_owner) -U $(db_owner)')
run('python manage.py syncdb --noinput')
Adicionar algo como isso pouco antes da syncdb:
run('psql -U $(db_owner) $(db_name) < app/sql/custom_types.sql')
e você deve ser bom para ir por apenas digitando:
$ fab createdb
ou
$ fab cluster createdb
para executar o comando em todas as máquinas listadas no seu ambiente chamada cluster
.