从视图中SELECT * INTO OUTFILE不起作用,但基础查询工作正常INTO OUTFILE

时间:2013-08-14 22:10:23

标签: mysql

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

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

2 个答案:

答案 0 :(得分:2)

这个帖子有点老了,但到目前为止它已经是关于该主题的少数(未解决)帖子的最佳表现,所以这是我发现的:

您可以猜到,因为当您将"添加到文件"时会出现错误。部分,缺少权限是访问文件的权限(是的,错误消息具有误导性)。

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

答案 1 :(得分:0)

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