1

我有一张使用 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;
  • 检查了这个堆栈溢出答案,这表明它可能是标识符长度太长,但我的标识符长度是 32 个字节,Postgres 默认最多允许 63 个字节

当我运行SHOW search_path;它时,它会显示"$user", public它应该是什么,但由于某种原因,Postgres 一直说这种关系不存在。

其他有用信息:

关于这里可能导致错误的任何想法?

4

1 回答 1

3

您的表名包含双引号。

在标识符中嵌入双引号遵循与在字符串文字中嵌入单引号相同的规则:您需要将它们加倍:

所以表是用这样的东西创建的:

create table """e7b6a2e19789418e9e48fd34e981b036"""(...);

从中选择时需要使用相同的语法:

SELECT * 
FROM """e7b6a2e19789418e9e48fd34e981b036""";
于 2018-11-20T15:40:21.903 回答