create and update GNI indexes
This commit is contained in:
parent
90758ca156
commit
c748527921
2 changed files with 43 additions and 5 deletions
|
@ -1,11 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# vi:si:et:sw=4:sts=4:ts=4
|
# vi:si:et:sw=4:sts=4:ts=4
|
||||||
|
from optparse import make_option
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
from django.db import connection
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
import monkey_patch.models
|
import monkey_patch.models
|
||||||
from ... import models
|
from ... import models
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
|
@ -14,8 +17,33 @@ class Command(BaseCommand):
|
||||||
"""
|
"""
|
||||||
help = 'sql create statements for find tables to use trigram index'
|
help = 'sql create statements for find tables to use trigram index'
|
||||||
args = ''
|
args = ''
|
||||||
|
option_list = BaseCommand.option_list + (
|
||||||
|
make_option('--debug', action='store_true', dest='debug',
|
||||||
|
default=False, help='print sql commans'),
|
||||||
|
)
|
||||||
|
|
||||||
def handle(self, **options):
|
def handle(self, **options):
|
||||||
print 'CREATE INDEX item_itemfind_value_idx ON item_itemfind USING gin (value gin_trgm_ops);'
|
cursor = connection.cursor()
|
||||||
print ''
|
def create_table(index, table, key):
|
||||||
print 'CREATE INDEX clip_clip_findvalue_idx ON clip_clip USING gin (findvalue gin_trgm_ops);'
|
sql = 'CREATE INDEX "%s" ON "%s" USING gin ("%s" gin_trgm_ops)' % (index, table, key)
|
||||||
|
if options['debug']:
|
||||||
|
print sql
|
||||||
|
cursor.execute(sql)
|
||||||
|
|
||||||
|
if settings.DB_GIN_TRGM:
|
||||||
|
table_name = models.ItemFind._meta.db_table
|
||||||
|
indexes = connection.introspection.get_indexes(cursor, table_name)
|
||||||
|
name = 'value'
|
||||||
|
if name not in indexes:
|
||||||
|
create_table("%s_%s_idx"%(table_name, name), table_name, name)
|
||||||
|
table_name = models.Clip._meta.db_table
|
||||||
|
cursor = connection.cursor()
|
||||||
|
indexes = connection.introspection.get_indexes(cursor, table_name)
|
||||||
|
name = 'findvalue'
|
||||||
|
if name not in indexes:
|
||||||
|
create_table("%s_%s_idx"%(table_name, name), table_name, name)
|
||||||
|
for name in settings.CONFIG['clipLayers']:
|
||||||
|
name = '%s_findvalue' % name
|
||||||
|
if name not in indexes:
|
||||||
|
create_table("%s_%s_idx"%(table_name, name), table_name, name)
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ from optparse import make_option
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.db import connection, transaction
|
from django.db import connection, transaction
|
||||||
|
from django.conf import settings
|
||||||
from django.db.models import fields
|
from django.db.models import fields
|
||||||
|
|
||||||
import monkey_patch.models
|
import monkey_patch.models
|
||||||
|
@ -75,6 +76,10 @@ class Command(BaseCommand):
|
||||||
if name not in model_fields:
|
if name not in model_fields:
|
||||||
sql = 'ALTER TABLE "%s" DROP COLUMN "%s"' % (table_name, name)
|
sql = 'ALTER TABLE "%s" DROP COLUMN "%s"' % (table_name, name)
|
||||||
changes.append(sql)
|
changes.append(sql)
|
||||||
|
if settings.DB_GIN_TRGM:
|
||||||
|
gin_indexes = ['%s_findvalue' % n for n in settings.CONFIG['clipLayers']]
|
||||||
|
else:
|
||||||
|
gin_indexes = []
|
||||||
for f in clip.models.Clip._meta.fields:
|
for f in clip.models.Clip._meta.fields:
|
||||||
if not f.primary_key and not isinstance(f, fields.related.ForeignKey):
|
if not f.primary_key and not isinstance(f, fields.related.ForeignKey):
|
||||||
name = f.name
|
name = f.name
|
||||||
|
@ -82,8 +87,13 @@ class Command(BaseCommand):
|
||||||
if name not in db_fields:
|
if name not in db_fields:
|
||||||
sql = 'ALTER TABLE "%s" ADD COLUMN "%s" %s' % (table_name, name, col_type)
|
sql = 'ALTER TABLE "%s" ADD COLUMN "%s" %s' % (table_name, name, col_type)
|
||||||
changes.append(sql)
|
changes.append(sql)
|
||||||
sql = 'CREATE INDEX "%s_%s_idx" ON "%s" ("%s")' % (table_name, name,
|
if name in gin_indexes:
|
||||||
table_name, name)
|
sql = 'CREATE INDEX "%s_%s_idx" ON "%s" USING gin ("%s" gin_trgm_ops);' % (
|
||||||
|
table_name, name, table_name, name
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
sql = 'CREATE INDEX "%s_%s_idx" ON "%s" ("%s")' % (table_name, name,
|
||||||
|
table_name, name)
|
||||||
changes.append(sql)
|
changes.append(sql)
|
||||||
sql = 'ALTER TABLE "%s" ALTER COLUMN "%s" SET NOT NULL' % (table_name, name)
|
sql = 'ALTER TABLE "%s" ALTER COLUMN "%s" SET NOT NULL' % (table_name, name)
|
||||||
changes.append(sql)
|
changes.append(sql)
|
||||||
|
|
Loading…
Reference in a new issue