PostgreSQL 错误:OperationalError: FATAL: 角色“用户名”不存在

0 postgresql

当我尝试运行代码时出现此错误。

错误

我在网站上搜索了这个问题

但它无法解决我的问题。

当我尝试使用我的用户名(TCOYUKSEL)创建超级用户时,它会使用“tcoyuksel”创建另一个超级用户

错误

ozgur.py 第 9 行 db = psycopg2.connect("dbname=news")

ozgur.py 第 73 行get_pop_articles(), str("views"))

init .py 第 130 行 conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
--我没有对这个文件做任何事情 --

Esa*_*nen 5

角色名称区分大小写,但随着您的查询,它会被转换为小写tcoyuksel

\n\n
CREATE ROLE TCOYUKSEL superuser;\nALTER ROLE TCOYUKSEL WITH LOGIN;\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为关键字和不带引号的标识符不区分大小写(4.1.1.标识符和关键字)。

\n\n
\n

还有第二种标识符:分隔标识符或带引号的标识符。它是通过用双引号 ( ) 括起任意\n 个字符序列而形成的"。分隔标识符始终是标识符,而不是关键字。So"select"可用于引用名为 \xe2\x80\x9c select\xe2\x80\x9d 的列或表,而未加引号的 select 将被\n 视为关键字,因此在以下情况下会引发解析错误:\n在需要表名或列名的地方使用。

\n
\n\n

您需要使用引号来绕过规范化,即用作TCOYUKSEL分隔标识符

\n\n
CREATE ROLE "TCOYUKSEL" superuser;\nALTER ROLE "TCOYUKSEL" WITH LOGIN;\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果直接从命令行运行它,则需要加倍引号:

\n\n
postgres "CREATE ROLE ""TCOYUKSEL"" superuser; ALTER ROLE ""TCOYUKSEL"" WITH LOGIN;"\n
Run Code Online (Sandbox Code Playgroud)\n