Nextcloud — сбой входа пользователя — Doctrine\\DBAL\\DBALException — ошибка 42601

В настоящее время я пытаюсь установить nc16 (16.0.0.1) на сервер Centos 7 с Apache, PostgreSQL и PHP 7.2.19. Установка работала до тех пор, пока пользователь admin создан и может войти в систему.

Теперь я создал новую группу пользователей и нового пользователя «пользователь» для использования без прав администратора. Вроде тоже работало.

Когда я пытаюсь войти в систему как этот новый пользователь, все, что у меня есть, это «Внутренняя ошибка сервера». Лог сообщает о проблеме с БД:

{
  "reqId": "XQtjdz6@ZzXEMrXsLfs-vgAAAAE",
  "level": 3,
  "time": "2019-06-20T10:44:07+00:00",
  "remoteAddr": "x.y.z.a",
  "user": "...",
  "app": "index",
  "method": "GET",
  "url": "/index.php/apps/files/",
  "message": {
    "Exception": "Doctrine\\DBAL\\Exception\\SyntaxErrorException",
    "Message": "An exception occurred while executing 'INSERT INTO \"oc_file_locks\" (\"key\", \"lock\", \"ttl\") VALUES(?, ?, ?) ON CONFLICT DO NOTHING' with params [\"files\\/bc95cece8ec382e86defaa1ca64de62c\", -1, 1561031047]:\n\nSQLSTATE[42601]: Syntax error: 7 FEHLER:  Syntaxfehler bei »ON«\nLINE 1: ..._locks\" (\"key\", \"lock\", \"ttl\") VALUES($1, $2, $3) ON CONFLIC...\n                                                             ^",
    "Code": 0,
    "Trace": [
      {
        "file": "/var/www/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php",
        "line": 184,
        "function": "convertException",
        "class": "Doctrine\\DBAL\\Driver\\AbstractPostgreSQLDriver",
        "type": "->",
        "args": [
          "An exception occurred while executing 'INSERT INTO \"oc_file_locks\" (\"key\", \"lock\", \"ttl\") VALUES(?, ?, ?) ON CONFLICT DO NOTHING' with params [\"files\\/bc95cece8ec382e86defaa1ca64de62c\", -1, 1561031047]:\n\nSQLSTATE[42601]: Syntax error: 7 FEHLER:  Syntaxfehler bei »ON«\nLINE 1: ..._locks\" (\"key\", \"lock\", \"ttl\") VALUES($1, $2, $3) ON CONFLIC...\n                                                             ^",
          {
            "errorInfo": [
              "42601",
              7,
              "FEHLER:  Syntaxfehler bei »ON«\nLINE 1: ..._locks\" (\"key\", \"lock\", \"ttl\") VALUES($1, $2, $3) ON CONFLIC...\n                                                             ^"
            ],
            "__class__": "Doctrine\\DBAL\\Driver\\PDOException"
          }
        ]
      },
      {
        "file": "/var/www/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php",
        "line": 158,
        "function": "wrapException",
        "class": "Doctrine\\DBAL\\DBALException",
        "type": "::",
        "args": [
          {
            "__class__": "Doctrine\\DBAL\\Driver\\PDOPgSql\\Driver"
          },
          {
            "errorInfo": [
              "42601",
              7,
              "FEHLER:  Syntaxfehler bei »ON«\nLINE 1: ..._locks\" (\"key\", \"lock\", \"ttl\") VALUES($1, $2, $3) ON CONFLIC...\n                                                             ^"
            ],
            "__class__": "Doctrine\\DBAL\\Driver\\PDOException"
          },
          "An exception occurred while executing 'INSERT INTO \"oc_file_locks\" (\"key\", \"lock\", \"ttl\") VALUES(?, ?, ?) ON CONFLICT DO NOTHING' with params [\"files\\/bc95cece8ec382e86defaa1ca64de62c\", -1, 1561031047]:\n\nSQLSTATE[42601]: Syntax error: 7 FEHLER:  Syntaxfehler bei »ON«\nLINE 1: ..._locks\" (\"key\", \"lock\", \"ttl\") VALUES($1, $2, $3) ON CONFLIC...\n                                                             ^"
        ]
      },
      {
        "file": "/var/www/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php",
        "line": 1088,
        "function": "driverExceptionDuringQuery",
        "class": "Doctrine\\DBAL\\DBALException",
        "type": "::",
        "args": [
          {
            "__class__": "Doctrine\\DBAL\\Driver\\PDOPgSql\\Driver"
          },
          {
            "errorInfo": [
              "42601",
              7,
              "FEHLER:  Syntaxfehler bei »ON«\nLINE 1: ..._locks\" (\"key\", \"lock\", \"ttl\") VALUES($1, $2, $3) ON CONFLIC...\n                                                             ^"
            ],
            "__class__": "Doctrine\\DBAL\\Driver\\PDOException"
          },
          "INSERT INTO \"oc_file_locks\" (\"key\", \"lock\", \"ttl\") VALUES(?, ?, ?) ON CONFLICT DO NOTHING",
          {
            "1": "files/bc95cece8ec382e86defaa1ca64de62c",
            "2": -1,
            "3": 1561031047
          }
        ]
      },
      {
        "file": "/var/www/nextcloud/lib/private/DB/Connection.php",
        "line": 216,
        "function": "executeUpdate",
        "class": "Doctrine\\DBAL\\Connection",
        "type": "->",
        "args": [
          "INSERT INTO \"oc_file_locks\" (\"key\", \"lock\", \"ttl\") VALUES(?, ?, ?) ON CONFLICT DO NOTHING",
          [
            "files/bc95cece8ec382e86defaa1ca64de62c",
            -1,
            1561031047
          ],
          [
            2,
            2,
            2
          ]
        ]
      },

(Вырезана трассировка стека, надеюсь, я не вырезал важную информацию - сообщите, если я это сделал...)

Уже пробовал удалить и заново создать пользователя.

Я еще не пытался использовать MySQL - я был бы рад, если бы вместо этого мог использовать PostgreSQL, потому что он уже настроен и работает на сервере, обслуживая различные веб-приложения.


person tohuwawohu    schedule 20.06.2019    source источник
comment
Кросспост на форумы NC — см. help.nextcloud.com/t/   -  person tohuwawohu    schedule 20.06.2019


Ответы (1)


Сам нашел:

Ошибка была вызвана некоторыми операторами SQL (ON CONFLICT), для которых требуется версия PostgreSLQ >= 9.5 (см. https://stackoverflow.com/a/40327552 и https://github.com/nextcloud/server/issues/15441). На Centos 7 установлен PostgreSQL 9.2.24. Итак, я полагаю, что Nextcloud 16 не будет устанавливаться на ящик Centos 7 с postgres по умолчанию в качестве бэкэнда db.

Решения: - Используйте MariaDB/MySQL (полагаю, должно работать, сам не проверял); - Обновите PostgresSQL до более новой версии (проверено, у меня сработало).

Чтобы обновить PostgreSQL до версии 9.6, я выполнил шаги, предложенные Алтином Укшини в его блоге. Обратите внимание: если вы использовали другую локаль для старого кластера postgres (как это сделал я), требуется еще один шаг (см. пятый комментарий - Ларри О'Нил - к записи в блоге Altins)!

Перед шагом 4: /usr/pgsql-9.6/bin/postgresql96-setup initdb вам необходимо установить требуемую локаль с помощью переменной env PGSETUP_INITDB_OPTIONS. В моем случае:

export PGSETUP_INITDB_OPTIONS=' --locale=de_DE.UTF-8'
person tohuwawohu    schedule 21.06.2019