如何以指定用户身份连接数据库?PostgreSQL初始化脚本问题求助
如何在PostgreSQL初始化脚本中以创建的sa用户连接数据库
嘿,我明白你遇到的问题了——你的初始化脚本创建了sa角色和master数据库,但执行\c master后还是默认用postgres用户连接,对吧?这是因为\c命令如果不指定用户,会沿用当前会话的用户(也就是你执行脚本时的默认postgres用户)。下面给你几个解决办法:
方法一:修改初始化脚本,显式指定用户连接
直接在\c命令后加上用户名,这样执行到这一步时就会切换到sa用户:
CREATE ROLE sa WITH LOGIN PASSWORD 'some-password.'; CREATE DATABASE master WITH OWNER sa; \c master sa; -- 这里明确指定用sa用户连接master数据库
执行这个脚本后,输出应该会变成:
CREATE ROLE
CREATE DATABASE
You are now connected to database "master" as user "sa"
完美符合你的需求!
方法二:脚本执行完成后手动切换用户
如果是在脚本执行完之后,想要从容器内部或者外部用sa用户连接master数据库,可以用以下命令:
- 从容器内部连接(先进入Docker容器):
psql -U sa master
- 从宿主机连接(假设容器端口映射到了5432):
psql -U sa -d master -h localhost -p 5432
执行时会提示你输入sa用户的密码,也就是你脚本里设置的some-password.。
额外注意事项
如果遇到sa用户无法连接的情况,可能是权限问题(虽然作为数据库OWNER默认拥有连接权限,但以防万一),可以在脚本里加上这句确保权限:
GRANT CONNECT ON DATABASE master TO sa;
内容的提问来源于stack exchange,提问作者René Vidriales Trujillo
相关产品推荐
相关产品推荐

