我尝试使用Postgresql wiki(https://wiki.postgresql.org/wiki/Retrieve_primary_key_columns)上建议的代码:
SELECT a.attname, format_type(a.atttypid, a.atttypmod) AS data_type
FROM pg_index i
JOIN pg_attribute a ON a.attrelid = i.indrelid
AND a.attnum = ANY(i.indkey)
WHERE i.indrelid = 'tablename'::regclass
AND i.indisprimary;
字符串
不幸的是,它似乎在红移中不起作用。我得到这个错误:
ERROR: op ANY/ALL (array) requires array on right side
型
是我做错了什么,还是这又是一个红移异常?
如有任何帮助,我们将不胜感激。
9条答案
按热度按时间vuktfyat1#
Redshift没有主键http://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html的概念,但是可以使用标识属性来设置唯一性。(更多信息,请访问http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html)
这不是真的。
Redshift不强制主键约束,但它们在其他方面也可供使用。它们在自动执行数据管道或数据质量检查时非常有用。在设计星星模式时,Redshift也推荐使用它们,因为它们被查询优化器用作提示。https://aws.amazon.com/blogs/big-data/optimizing-for-star-schemas-and-interleaved-sorting-on-amazon-redshift/的
下面是获取表主键的一种方法:
字符串
视图
admin.v_generate_tbl_ddl
的代码如下所示:https://github.com/awslabs/amazon-redshift-utils/tree/master/src/AdminViews的uidvcgyl2#
您可以使用以下SQL来获取模式“schemaname”中的表“tablename”的主键列表
字符串
jgzswidk3#
遗憾的是,ISO标准
information_schema
视图并没有讲述Redshift的全部故事。我怀疑这些约束没有在information_schema.table_constraints
中列出,因为它们没有在Redshift中强制执行。但是有一种方法
AWS提供了一个github repo,其中包含许多管理工具,实用程序和视图。视图为here
其中一个视图是
v_generate_tbl_ddl
这个视图可以为您提供完整的DDL来重新创建表,包括指定
Primary Key
。我已经提取了视图的相关部分,它会给予你主键。该视图的其他部分展示了如何获取dist键,sort键和其他有用的东西:
字符串
fzsnzjdm4#
这在
INFORMATION_SCHEMA
中更容易实现:字符串
是的,这在红移上有效。
3vpjnl9f5#
dsz的回答对我不起作用,但真的很接近!(不得不更改“catalogue”的拼写,选择key_column_usage而不是table_constraints,并在连接中添加一个额外的和)
这对我来说适用于redshift和MySQL。尚未明确尝试Postgres,但应该可以工作:
字符串
qmelpv7a6#
information_schema不适用于所有用户
字符串
wn9m85ua7#
试试这一个的帮助:https://bitbucket.org/zzzeek/sqlalchemy/pull-request/6/sqlalchemy-to-support-postgresql-80/diff
字符串
pepwfjgg8#
哈什的解决方案对我很有效。我把它贴在这里,因为我仍然不能投票。
IDE:AWS Redshift查询编辑器
字符串
nhn9ugyo9#
Redshift不强制主键http://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html的概念,但身份属性可以用来设置唯一性。(更多信息,请访问http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html)
有关现有表的详细信息,可以使用以下查询
字符串