我正在尝试学习Postgres,我已经制作了两个基本表格,我不能将它们连接在一起。
这是我的关系列表:
Schema | Name | Type | Owner
--------+--------------+----------+----------
public | login | table | postgres
public | login_id_seq | sequence | postgres
public | users | table | test
(3 rows)
当我使用命令
SELECT * FROM users JOIN login ON users.name = login.name;
时,我得到了
错误:关系登录的权限被拒绝
我不知道该做什么或做错了什么。
答案 0 :(得分:3)
您应该向用户 test 授予SELECT
权限:
GRANT SELECT ON login TO test;
如果if允许 test 修改login
,您还应该授予其他权限:
GRANT SELECT, INSERT, UPDATE, DELETE ON login TO test;
您应该将这些语句作为数据库所有者或用户 postgres 执行。通常,您可以使用
psql -Upostgres -dtest
如果您在运行Postgres服务器的同一台机器上运行此命令。
您还可以将login
的所有权更改为 test :
ALTER TABLE login OWNER TO test;
ALTER SEQUENCE login_id_seq OWNER TO test;
但必须以用户 postgres 执行此操作。
修改:您可以尝试使用
更改用户SET ROLE 'postgres';
按照 @lat long 的建议。
答案 1 :(得分:1)
所以这就是我最终让它发挥作用...我基本上只是进入了pgAdmin4的登录属性,找到了所有者并将其切换为测试并运行:
SELECT * FROM users JOIN login ON users.name = login.name;
终于得到了我想要的东西。令人惊讶的简单修复。
答案 2 :(得分:0)
“test”用户无权登录并使用相关表。使用“postgres”用户运行查询:
SET ROLE 'postgres';
然后运行您的查询。