django .db.utils.ProgrammingError: синтаксическая ошибка в или около "FUNCTION" - PullRequest
0 голосов
/ 15 января 2020

Я следую Оптимизация полнотекстового поиска в статье Django, и в какой-то момент статья говорит:

Чтобы добавить триггер, нам нужно создать руководство Django миграция. Это добавит функцию триггера и обновит все наши строки страниц, чтобы обеспечить запуск триггера и заполнение content_search во время миграции для существующих записей.

from django.db import migrations
class Migration(migrations.Migration):
    dependencies = [
        ('web', '0002_auto_20200115_1401')
    ]
    migration = '''
        CREATE TRIGGER content_search_update BEFORE INSERT OR UPDATE
        ON web_page FOR EACH ROW EXECUTE FUNCTION
        tsvector_update_trigger(content_search, 'pg_catalog.english', content);

        -- Force triggers to run and populate the text_search column.
        UPDATE web_page set ID = ID;
    '''
    reverse_migration = '''
        DROP TRIGGER content_search ON web_page;
    '''
    operations = [migrations.RunSQL(migration, reverse_migration)]

при запуске миграции я получаю эта ошибка:

django .db.utils.ProgrammingError: синтаксическая ошибка в или около "FUNCTION"

Одно отличие моего settings.py от учебной статьи в том, что он использует django.db.backends.postgresql в качестве движка базы данных, а я использую django.db.backends.postgresql_psycopg2 В чем здесь проблема и, что более важно, как я могу решить эту проблему? Заранее спасибо.

1 Ответ

2 голосов
/ 15 января 2020

Я считаю, что вам нужно использовать PROCEDURE вместо FUNCTION.

from django.db import migrations
class Migration(migrations.Migration):
    dependencies = [
        ('web', '0002_auto_20200115_1401')
    ]
    migration = '''
        CREATE TRIGGER content_search_update BEFORE INSERT OR UPDATE
        ON web_page FOR EACH ROW EXECUTE PROCEDURE
        tsvector_update_trigger(content_search, 'pg_catalog.english', content);

        -- Force triggers to run and populate the text_search column.
        UPDATE web_page set ID = ID;
    '''
    reverse_migration = '''
        DROP TRIGGER content_search ON web_page;
    '''
    operations = [migrations.RunSQL(migration, reverse_migration)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...