0

我正在运行一个查询,该查询基于某些视图进行计算,并将结果写入文件。它看起来像这样:

select `v1`.`id` AS `id`,`v2`.`name` AS `name`,
`v2`.`nbr` AS `nbr`,
`v1`.`nbr` AS `total`,
(`v2`.`nbr` / `v1`.`nbr`) AS `percent`

INTO OUTFILE '/home/username/mysqldump/filename.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'

from `v2` join `v1`

where `v2`.`id` = `v1`.`id`

这很好用。我基于此查询创建了一个视图,但正如我预期的那样,它不能作为直接替换。这是 SHOW CREATE VIEW 的“创建视图”部分:

 CREATE ALGORITHM=UNDEFINED  DEFINER=`user`@`localhost`
       SQL SECURITY DEFINER
 VIEW `view_name` AS
  select `v1`.`id` AS `id`,
         `v2`.`name` AS `name`,
         `v2`.`nbr` AS `nbr`,
         `v1`.`nbr` AS `total_pvs`,
          (`v2`.`nbr` / `v1`.`nbr`) AS `percent`
  from (`v2` join `v1`) where (`v2`.`id` = `v1`.`id`)

这是不起作用的查询:

 SELECT * INTO OUTFILE '/home/username/mysqldump/filename.csv'
 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
 LINES TERMINATED BY '\n'
 FROM view_name;

我收到了这个错误:

ERROR 1356 (HY000): View 'database_name.view_name' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them

我以 root 身份运行,所以我认为没有任何权利问题。是什么让这个查询在 MySQL 眼中无效?我正在运行版本 5.5.32-0ubuntu0.12.04.1 (Ubuntu)

编辑:运行SELECT * FROM view_name按预期返回记录。但是,由于有数千行,并且需要纯格式,我宁愿使用INTO OUTFILE.

4

2 回答 2

2

这个帖子有点老了,但它是迄今为止关于该主题的少数(未解决的)帖子的最佳展示,所以这是我发现的:

您可以猜到,由于在添加“到文件”部分时会出现错误,因此缺少权限是访问文件的权限(是的,错误消息具有误导性)。

实际上,如果您授予视图的定义者全局 FILE 权限,错误就会消失。(这使得错误消息以第二种方式误导,因为它看起来调用者权限在那里没有影响 - 尽管他们应该,恕我直言。)

于 2015-10-26T11:11:38.243 回答
0

我会尝试只运行选择而不先导出到文件。从输出文件中选择 *

于 2013-08-14T22:18:07.953 回答