无法使用 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 从亚马逊红移读取列类型的主要内容,如果未能解决你的问题,请参考以下文章