Dav*_*han 22 django postgresql database-partitioning django-migrations
我知道Django中的游标对象.在迁移中是否还有其他首选方法可以执行原始SQL?我想为我的一个模型表引入postgresql分区.分区逻辑是一系列功能和触发器,必须在我想要自动化的设置中添加到数据库中.
Dav*_*han 39
我发现这样做的最好方法是使用RunSQL:
迁移包含RunSQL类.去做这个:
./manage.py makemigrations --empty myAppoperations = [
migrations.RunSQL('RAW SQL CODE')
]
正如纳撒尼尔·奈特所提到的,RunSQL也接受了一个reverse_sql反转迁移的参数.有关详细信息,请参阅文档
我最初解决问题的方法是使用post_migrate信号调用游标来执行我的原始SQL.
我必须添加到我的应用程序是这样的:
在__init__.pymyApp中添加:
default_app_config = 'myApp.apps.MyAppConfig'
Run Code Online (Sandbox Code Playgroud)
创建一个文件apps.py:
from django.apps import AppConfig
from django.db.models.signals import post_migrate
from myApp.db_partition_triggers import create_partition_triggers
class MyAppConfig(AppConfig):
name = 'myApp'
verbose_name = "My App"
def ready(self):
post_migrate.connect(create_partition_triggers, sender=self)
Run Code Online (Sandbox Code Playgroud)
新文件db_partition_triggers.py:
from django.db import connection
def create_partition_triggers(**kwargs):
print ' (re)creating partition triggers for myApp...'
trigger_sql = "CREATE OR REPLACE FUNCTION...; IF NOT EXISTS(...) CREATE TRIGGER..."
cursor = connection.cursor()
cursor.execute(trigger_sql)
print ' Done creating partition triggers.'
Run Code Online (Sandbox Code Playgroud)
现在在每个manage.py syncdb或manage.py migrate这个函数被调用.所以确保它使用CREATE OR REPLACE和IF NOT EXISTS.所以它可以处理现有的功能.
| 归档时间: |
|
| 查看次数: |
13607 次 |
| 最近记录: |