Nextcloud - 用户登录失败 - Doctrine\\DBAL\\DBALException - 错误 42601

Nextcloud - user login fails - Doctrine\\DBAL\\DBALException - Error 42601

我目前正尝试在装有 Apache、PostgreSQL 和 PHP 7.2.19 的 Centos 7 服务器上安装 nc16 (16.0.0.1)。到目前为止,已创建管理员用户并可以登录,安装成功。

现在,我创建了一个新的组用户和一个新的 "user" 用户供非管理员使用。似乎也有效。

当我尝试以该新用户身份登录时,我得到的只是 "Internal server error"。日志讲述了一个与数据库相关的问题:

{
  "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(, , ) 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(, , ) ON CONFLIC...\n                                                             ^",
          {
            "errorInfo": [
              "42601",
              7,
              "FEHLER:  Syntaxfehler bei »ON«\nLINE 1: ..._locks\" (\"key\", \"lock\", \"ttl\") VALUES(, , ) 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(, , ) 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(, , ) 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(, , ) 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
          ]
        ]
      },

(Stacktrace 删减,我希望我没有删减重要信息 - 如果我删减请告知...)

已尝试删除并重新创建用户。

我还没有尝试使用 MySQL - 如果我可以使用 PostgreSQL 我会很高兴,因为它已经配置并且 运行 在服务器上,服务于不同的网络应用程序。

自己找到的:

错误是由一些 SQL 语句(冲突)导致的,这些语句需要 PostgreSLQ 版本 >= 9.5(参见 and https://github.com/nextcloud/server/issues/15441)。在 Centos 7 上,安装了 PostgreSQL 9.2.24。所以,我想 Nextcloud 16 不会安装在默认 postgres 作为数据库后端的 Centos 7 机器上。

解决方案: - 使用 MariaDB / MySQL(我认为这应该有效,但我自己没有测试); - 将 PostgresSQL 升级到更新版本(经过测试,对我有用)。

要将 PostgreSQL 升级到 9.6,我遵循了 steps proposed by Altin Ukshini on his blog请注意:如果您对旧的 postgres 集群使用了不同的语言环境(就像我一样),则需要另一个步骤(参见第五条评论- 拉里·奥尼尔 (Larry O'Neill) - 到 Altins 博客条目)!

第 4 步之前:/usr/pgsql-9.6/bin/postgresql96-setup initdb,您需要使用环境变量 PGSETUP_INITDB_OPTIONS.就我而言:

export PGSETUP_INITDB_OPTIONS=' --locale=de_DE.UTF-8'