数据库迁移后,在管理UI中查看带子级的页面时出错



在将我们的项目从MySQL迁移到PostgreSQL之后,部分管理UI已经损坏。当导航到包含子级的页面时,会抛出一个错误,该错误似乎源自Wagtail核心。这是日志:

Environment:

Request Method: GET
Request URL: https://beta.detfri.dk/admin/pages/3/
Django Version: 3.0.6
Python Version: 3.8.10
Installed Applications:
['home',
'search',
'wagtail.contrib.forms',
'wagtail.contrib.redirects',
'wagtail.embeds',
'wagtail.sites',
'wagtail.users',
'wagtail.snippets',
'wagtail.documents',
'wagtail.images',
'wagtail.search',
'wagtail.admin',
'wagtail.core',
'modelcluster',
'taggit',
'colorfield',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'wagtail.contrib.legacy.sitemiddleware.SiteMiddleware',
'wagtail.contrib.redirects.middleware.RedirectMiddleware']

Template error:
In template /var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/wagtail/admin/templates/wagtailadmin/pages/listing/_page_title_explore.html, error at line 6
operator does not exist: character = uuid
LINE 1: ...."id") WHERE "wagtailcore_page"."translation_key" = '1c0af87...
^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.
1 : {% load i18n wagtailadmin_tags %}
2 : 
3 : {# The title field for a page in the page listing, when in 'explore' mode #}
4 : 
5 : <div class="title-wrapper">
6 :      {% if page.is_site_root %} 
7 :         {% if perms.wagtailcore.add_site or perms.wagtailcore.change_site or perms.wagtailcore.delete_site %}
8 :             <a href="{% url 'wagtailsites:index' %}" class="icon icon-site" title="{% trans 'Sites menu' %}"></a>
9 :         {% endif %}
10 :     {% endif %}
11 : 
12 :     {% if page_perms.can_edit %}
13 :         <a href="{% url 'wagtailadmin_pages:edit' page.id %}" title="{% trans 'Edit this page' %}">{{ page.get_admin_display_title }}</a>
14 :     {% else %}
15 :         {{ page.get_admin_display_title }}
16 :     {% endif %}

Traceback (most recent call last):
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
The above exception (operator does not exist: character = uuid
LINE 1: ...."id") WHERE "wagtailcore_page"."translation_key" = '1c0af87...
^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.
) was the direct cause of the following exception:
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 145, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 143, in _get_response
response = response.render()
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/wagtail/admin/auth.py", line 187, in overridden_render
return render()
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/response.py", line 105, in render
self.content = self.rendered_content
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/response.py", line 83, in rendered_content
return template.render(context, self._request)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 171, in render
return self._render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 188, in render
return template.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 173, in render
return self._render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 309, in render
return nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 209, in render
nodelist.append(node.render_annotated(context))
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 188, in render
return template.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 173, in render
return self._render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 302, in render
match = condition.eval(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 876, in eval
return self.value.resolve(context, ignore_failures=True)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 670, in resolve
obj = self.var.resolve(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 795, in resolve
value = self._resolve_lookup(context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/template/base.py", line 857, in _resolve_lookup
current = current()
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/wagtail/core/models.py", line 989, in is_site_root
return Site.objects.filter(root_page__translation_key=self.translation_key).exists()
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/models/query.py", line 777, in exists
return self.query.has_results(using=self.db)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/models/sql/query.py", line 538, in has_results
return compiler.has_results()
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1121, in has_results
return bool(self.execute_sql(SINGLE))
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1151, in execute_sql
cursor.execute(sql, params)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 100, in execute
return super().execute(sql, params)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/var/www/detfri.dk/detfri/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
Exception Type: ProgrammingError at /admin/pages/3/
Exception Value: operator does not exist: character = uuid
LINE 1: ...."id") WHERE "wagtailcore_page"."translation_key" = '1c0af87...
^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

如果需要的话,还有一些关于系统的信息:

Python version: 3.8.10
Django version: 3.0.6
Wagtail version: 2.12.3
PostgreSQL version: 12.9
Operating system: Ubuntu Server 21.04

我在这里不知所措,非常感谢你的帮助。

我也遇到了同样的问题。我想当我将数据从sqlite3移动到postgresql时,wagtailcore_page列translation_key从"uuid"更改为列类型"integer"。通过使用以下Postgres命令将translation_key更改为"uuid"来解决此问题:

ALTER TABLE "wagtailcore_page" ALTER COLUMN "translation_key" SET DATA TYPE UUID USING "translation_key"::UUID;

最新更新