无法使用 psycopg2 从亚马逊红移读取列类型

Posted

技术标签:

【中文标题】无法使用 psycopg2 从亚马逊红移读取列类型【英文标题】:Unable to read column types from amazon redshift using psycopg2 【发布时间】:2018-07-20 20:40:09 【问题描述】:

我正在尝试使用 psycopg2 在 redshift 中访问表中的列类型。

我通过在pg_table_def 上运行一个简单的查询来做到这一点,如下所示:

SELECT * FROM pg_table_def;

这会返回回溯:

psycopg2.NotSupportedError: Column "schemaname" has unsupported type "name"

因此,psycopg2 似乎不支持存储架构(以及有关进一步查询的其他类似信息)的列类型。

有没有人遇到过这个问题或类似的问题并知道解决方法?我的主要目标是能够返回表中的列类型。就我正在做的事情而言,我不能使用另一个 postgresql 适配器。

使用:

python- 3.6.2

psycopg2- 2.7.4

熊猫- 0.17.1

【问题讨论】:

您是否有权访问所有表?如果未在 WHERE tablename = 'table_name' 中指定表名。另外,请查看此链接:docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html 我几乎完全确定我这样做了,但如果我不这样做,为什么会导致这个错误(我对思考过程很好奇,因为我是 Postgres 的新手)?无论哪种方式,我只是为我可以访问的表运行SELECT * FROM pg_table_def WHERE tablename = 'table_name',而 psycopg2 抛出了同样的错误。 在Edit 行之后发布您问题中表的架构。 【参考方案1】:

您可以执行以下操作,并将结果返回给调用服务。

cur.execute("select * from pg_table_def where tablename='sales'")

results = cur.fetchall()
for row in results:
    print ("ColumnNanme=>"+row[2] +",DataType=>"+row[3]+",encoding=>"+row[4])  

不确定异常,如果所有权限都很好,那么它应该可以正常工作,打印如下所示。

ColumnNanme=>salesid,DataType=>integer,encoding=>lzo
ColumnNanme=>commission,DataType=>numeric(8,2),encoding=>lzo
ColumnNanme=>saledate,DataType=>date,encoding=>lzo
ColumnNanme=>description,DataType=>character varying(255),encoding=>lzo

【讨论】:

以上是关于无法使用 psycopg2 从亚马逊红移读取列类型的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊红移,sqlworkbench/j

无法使用 psycopg2 从 Amazon Redshift 读取数据

使用字符串函数反序列化亚马逊红移中的 php 对象

从 R 连接到亚马逊红移时出错 - Windows 10

从亚马逊红移中选择最大嵌套 ID

亚马逊红移真空重新索引