Revert "Fix #994: use PostgreSQL full-text-search"
This reverts commit b3d8d6a4da.
This commit is contained in:
parent
b3d8d6a4da
commit
7b0db234e2
6 changed files with 5 additions and 148 deletions
|
|
@ -1,109 +0,0 @@
|
|||
# Generated by Django 2.2.7 on 2019-12-16 15:06
|
||||
|
||||
import django.contrib.postgres.search
|
||||
import django.contrib.postgres.indexes
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
from django.db import connection
|
||||
|
||||
FIELDS = {
|
||||
"music.Artist": {
|
||||
"fields": [
|
||||
'name',
|
||||
],
|
||||
"trigger_name": "music_artist_update_body_text"
|
||||
},
|
||||
"music.Track": {
|
||||
"fields": ['title', 'copyright'],
|
||||
"trigger_name": "music_track_update_body_text"
|
||||
},
|
||||
"music.Album": {
|
||||
"fields": ['title'],
|
||||
"trigger_name": "music_album_update_body_text"
|
||||
},
|
||||
}
|
||||
|
||||
def populate_body_text(apps, schema_editor):
|
||||
for label, search_config in FIELDS.items():
|
||||
model = apps.get_model(*label.split('.'))
|
||||
print('Populating search index for {}…'.format(model.__name__))
|
||||
vector = django.contrib.postgres.search.SearchVector(*search_config['fields'])
|
||||
model.objects.update(body_text=vector)
|
||||
|
||||
def rewind(apps, schema_editor):
|
||||
pass
|
||||
|
||||
def setup_triggers(apps, schema_editor):
|
||||
cursor = connection.cursor()
|
||||
for label, search_config in FIELDS.items():
|
||||
model = apps.get_model(*label.split('.'))
|
||||
table = model._meta.db_table
|
||||
print('Creating database trigger {} on {}…'.format(search_config['trigger_name'], table))
|
||||
sql = """
|
||||
CREATE TRIGGER {trigger_name}
|
||||
BEFORE INSERT OR UPDATE
|
||||
ON {table}
|
||||
FOR EACH ROW
|
||||
EXECUTE PROCEDURE
|
||||
tsvector_update_trigger(body_text, 'pg_catalog.english', {fields})
|
||||
""".format(
|
||||
trigger_name=search_config['trigger_name'],
|
||||
table=table,
|
||||
fields=', '.join(search_config['fields']),
|
||||
)
|
||||
print(sql)
|
||||
cursor.execute(sql)
|
||||
|
||||
def rewind_triggers(apps, schema_editor):
|
||||
cursor = connection.cursor()
|
||||
for label, search_config in FIELDS.items():
|
||||
model = apps.get_model(*label.split('.'))
|
||||
table = model._meta.db_table
|
||||
print('Dropping database trigger {} on {}…'.format(search_config['trigger_name'], table))
|
||||
sql = """
|
||||
DROP TRIGGER IF EXISTS {trigger_name} ON {table}
|
||||
""".format(
|
||||
trigger_name=search_config['trigger_name'],
|
||||
table=table,
|
||||
)
|
||||
|
||||
cursor.execute(sql)
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('music', '0043_album_cover_attachment'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='album',
|
||||
name='body_text',
|
||||
field=django.contrib.postgres.search.SearchVectorField(blank=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='artist',
|
||||
name='body_text',
|
||||
field=django.contrib.postgres.search.SearchVectorField(blank=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='track',
|
||||
name='body_text',
|
||||
field=django.contrib.postgres.search.SearchVectorField(blank=True),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='album',
|
||||
index=django.contrib.postgres.indexes.GinIndex(fields=['body_text'], name='music_album_body_te_0ec97a_gin'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='artist',
|
||||
index=django.contrib.postgres.indexes.GinIndex(fields=['body_text'], name='music_artis_body_te_5c408d_gin'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='track',
|
||||
index=django.contrib.postgres.indexes.GinIndex(fields=['body_text'], name='music_track_body_te_da0a66_gin'),
|
||||
),
|
||||
|
||||
migrations.RunPython(setup_triggers, rewind_triggers),
|
||||
migrations.RunPython(populate_body_text, rewind),
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue