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'
我目前正尝试在装有 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(参见
解决方案: - 使用 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'