Power Query连接PostgreSQL数据源时关系列缺失问题咨询
问题根因排查
你遇到的Power Query关系列缺失,大概率和两个因素有关,优先级从高到低排序:
外键约束的NOT VALID属性导致Power Query未识别
你当前创建的两个外键都加了NOT VALID参数,该属性代表PostgreSQL仅约束后续新增/修改的数据符合外键规则,不会校验存量数据。Power Query读取PostgreSQL元数据时,默认只会识别状态为VALID的外键约束,未验证的约束会被直接忽略,这是最常见的触发原因。系统表读取权限不足
如果外键已经是VALID状态仍未展示关系列,才需要排查权限问题:Power Query需要读取PostgreSQL系统表pg_catalog.pg_constraint、pg_catalog.pg_class、pg_catalog.pg_namespace的元数据才能识别关联关系,默认public角色拥有这些系统表的SELECT权限,如果你修改过默认权限就会导致读取失败。
验证与修复方法
第一步:验证外键约束状态
使用如下SQL查询外键是否为已验证状态:
SELECT conname AS 外键约束名, convalidated AS 是否已验证 FROM pg_constraint WHERE connamespace = 'saireco'::regnamespace AND contype = 'f' AND conrelid = 'saireco.position'::regclass;
如果是否已验证字段返回false,执行如下命令验证约束即可:
-- 替换为上一步查询得到的外键约束名,两个外键分别执行 ALTER TABLE saireco."position" VALIDATE CONSTRAINT "position_EmployeeID_fkey"; ALTER TABLE saireco."position" VALIDATE CONSTRAINT "position_DepartmentID_fkey";
第二步:验证系统表访问权限
使用saireco用户执行如下SQL,测试是否能正常读取外键元数据:
SELECT COUNT(*) FROM pg_catalog.pg_constraint WHERE connamespace = 'saireco'::regnamespace AND contype = 'f';
如果查询报错或者返回值为0,说明权限不足,执行如下授权命令:
GRANT SELECT ON pg_catalog.pg_constraint, pg_catalog.pg_class, pg_catalog.pg_namespace TO saireco;
最后操作
所有调整完成后,清除Power Query中对应PostgreSQL数据源的缓存,重新加载表即可恢复关系列展示。
内容的提问来源于stack exchange,提问作者Orandasoft
相关产品推荐
相关产品推荐

