我正在使用以下查询来发现 (1) 主键列和 (2) 列是否具有来自 Postgresql 9.1 中的 information_schema 的默认值。
SELECT kcu.column_name, (c.column_default is not null) AS has_default
FROM information_schema.key_column_usage kcu
JOIN information_schema.table_constraints tc ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.columns c on c.column_name = kcu.column_name and c.table_name = kcu.table_name
WHERE tc.constraint_type = 'PRIMARY KEY' AND kcu.table_name like :tablename
作为数据库所有者运行时它工作正常,但是当我作为“只读”用户运行它时(我需要在我的应用程序中这样做),它不会返回任何数据。一些研究表明问题出在 information.table_constraints 视图上;从文档中:
视图 table_constraints 包含属于当前用户拥有或具有某些非 SELECT 权限的表的所有约束。
那么为了检索table_constraints,我的登录角色需要的不仅仅是表上的SELECT?如果不授予登录角色写入权限,是否无法从 information_schema 获取信息?