【问题标题】:\i psql permission denied\i psql 权限被拒绝
【发布时间】:2021-04-01 16:35:09
【问题描述】:

我正在尝试运行一个使用 postgresql 的 .sql 脚本。我已经安装了 postgresql,并创建了一个数据库来运行脚本,但是我不断收到文件上的权限被拒绝错误。寻找问题的解决方案或变通方法以允许我执行 psql 脚本。

我尝试过的: 重击:

chmod 777 mysqlfile.sql
chown postgres mysqlfile.sql

psql 命令:

\i /path/to/file/mysqlfile.sql
psql -U postgres -d testdb -a -f mysqlfile.sql

我已经查看了以下解决方案,但它们并没有解决我的问题:Sol1Sol2,我使用此站点作为设置 postgresql 的说明。

目前我在尝试运行上面使用的命令时遇到权限被拒绝错误,理想的解决方案/解决方法是在新数据库上的 postgres 中执行 sql 脚本。

【问题讨论】:

  • 目录也有权限。 [cat /path/to/file/mysqlfile.sql 是做什么的? ]
  • 给了我一个权限被拒绝的错误。也许如果我在 postgres 中创建用户作为我的普通帐户,它将起作用......
  • psql 需要做两件事:1)连接数据库(成功) 2)读取文件(失败)

标签: postgresql psql permission-denied sql-scripts


【解决方案1】:

@wildplasser 发表评论后,我找到了解决方案。下面我按顺序运行命令以解决问题,然后进行解释。

cs@cs: sudo -u -i postgres
postgres@cs: psql
(postgres) psql: CREATE DATABASE cs;
(postgres) psql: GRANT ALL PRIVILEGES ON DATABASE cs TO cs;
(postgres) psql: exit 
postgres@cs: exit
cs@cs: psql
(cs) psql: \i /path/to/file/mysqlfile.sql

为什么我必须这样做:

当您以 postgres 以外的身份连接到 psql 时,它还会查找要以该名称连接的数据库。所以我创建了一个与我的本地帐户(cs)同名的数据库(cs),否则它会出错。我还给了自己对该数据库的所有权限。然后我就可以按预期执行命令了。

这个解决方案有点恶心。我会关注这个帖子一段时间,如果有更好的结果我会很乐意切换答案。

【讨论】:

  • psql 正在寻找 -d 数据库名称、-U 用户名、-h 主机名和/或 -p 端口号。在没有明确声明的情况下,它将回退到默认值。因此,如果您想以说明符用户身份连接到特定数据库,请使用上面的参数来执行此操作。这一切都在这里psqlKey words 进行了说明。
  • 是的,我在我发布的最初问题的一个链接中看到了该解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2018-07-19
相关资源
最近更新 更多