【发布时间】:2019-04-23 02:17:14
【问题描述】:
我有一张使用 Pandas 转储到 Postgres 的表,Pandas 可以使用 read_sql_table 命令很好地读取它,但我似乎无法使用 SQL 访问它。当我运行\dt 命令时,我将公共架构下列出的表作为现有表之一。
List of relations
Schema | Name | Type | Owner
--------+------------------------------------+-------+----------
public | "e7b6a2e19789418e9e48fd34e981b036" | table | postgres
但是当我运行SELECT * FROM "e7b6a2e19789418e9e48fd34e981b036"; 时,我得到了关系不存在错误。我尝试了以下方法:
SELECT * FROM "e7b6a2e19789418e9e48fd34e981b036"SELECT * FROM "public"."e7b6a2e19789418e9e48fd34e981b036"- 通过执行
GRANT USAGE ON SCHEMA public TO postgres;将公共架构的使用权授予用户 - 检查了这个stack overflow answer,这表明它可能是标识符长度太长,但我的标识符长度是 32 个字节,Postgres 默认最多允许 63 个字节
当我运行SHOW search_path; 时,它会显示"$user", public,但由于某种原因,Postgres 一直说这种关系不存在。
其他有用信息:
- 我在来自here 的 docker 容器中运行 Postgres
您知道这里可能导致错误的原因吗?
【问题讨论】:
-
您是否以表所有者
postgres的身份登录? (顺便说一句:使用超级用户创建表或为您的应用程序使用超级用户帐户不是一个好主意) -
是的,我以
postgres用户身份登录。感谢您的提示,我只在我的开发机器上执行此操作,而在生产中我使用的是不同的用户 -
我可以知道为什么在这里标记熊猫吗?
-
该表是使用 pandas 的
to_sql方法创建的,pandas 可以使用read_sql方法很好地读取它,所以我认为它可能与它有关。我现在删除标签
标签: postgresql quoted-identifier