【问题标题】:Laravel 5.5 - DB::statement error with \copy command (POSTGRES)Laravel 5.5 - DB::statement 错误与 \copy 命令(POSTGRES)
【发布时间】:2019-04-03 19:19:39
【问题描述】:

我正在尝试使用 laravel 5.5 的 POSTGRES 中的 \copy 命令在数据库中插入一个大文件,但我在下面收到此错误。

我试过这样:

DB::statement( DB::raw("\\copy requisicoes FROM '".$file1."' WITH DELIMITER ','"));

得到这个错误:

SQLSTATE[42601]: 语法错误: 7 错误: "\" LINE 1 处或附近的语法错误: \copy requisicoes FROM '/srv/www/bilhetagem_logs/bilhetagem_... ^ (SQL: \copy requisicoes FROM ' /srv/www/bilhetagem_logs/bilhetagem_log1_2018-10-29' 带分隔符',')

也试过这种方式:

DB::statement( DB::raw('\copy requisicoes FROM \''.$file1.'\' WITH DELIMITER \',\''));

得到这个错误:

SQLSTATE[42601]: 语法错误: 7 错误: "\" LINE 1 处或附近的语法错误: \copy requisicoes FROM '/srv/www/bilhetagem_logs/bilhetagem_... ^ (SQL: \copy requisicoes FROM ' /srv/www/bilhetagem_logs/bilhetagem_log1_2018-10-29' 带分隔符',')

如果我使用 psql 行命令执行返回上述错误的命令,则可以正常工作

\copy requisicoes FROM '/srv/www/bilhetagem_logs/bilhetagem_log1_2018-10-29' WITH DELIMITER ','

有人可以帮助我吗? :)

我必须使用 \copy insted of copy 因为我在数据库中没有超级用户权限。 https://www.postgresql.org/docs/9.2/static/sql-copy.html

COPY 命名文件只允许数据库超级用户使用,因为它允许读取或写入服务器有权访问的任何文件。

【问题讨论】:

  • \copypsql 命令,而不是常规 SQL 命令。唯一可以使用它的环境是psql

标签: database postgresql laravel-5


【解决方案1】:

在 PostgreSQL 上查看 this article 并注意这一行:

不要将 COPY 与 psql 指令 \copy 混淆。 \copy 调用 COPY FROM STDIN 或 COPY TO STDOUT,然后获取/存储数据 psql 客户端可访问的文件。因此,文件可访问性和 \copy 时访问权限取决于客户端而不是服务器 被使用了。

\copy是psql指令,不用写\copy,只写COPY即可。

【讨论】:

  • 嗨,这个链接在我的问题中,就像我说的 \copy 与 copy 不同。 copy 需要超级用户权限(我没有),而 \copy 使用 STDIN。但我得到了那个错误。 Tks
猜你喜欢
  • 2018-07-15
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
相关资源
最近更新 更多