2013-08-14 2 views
0

Я выполняю запрос, который вычисляет на основе некоторых представлений и записывает результаты в файл. Это выглядит так:SELECT * INTO OUTFILE из представления не работает, но базовый запрос работает нормально INTO OUTFILE

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

I «Я работаю от имени root, поэтому я не думаю, что есть какие-то проблемы с правами. Что может сделать этот запрос недопустимым в глазах MySQL? Я бегу версии 5.5.32-0ubuntu0.12.04.1 (Ubuntu)

EDIT: Запуск SELECT * FROM view_name возвращает записей, как ожидалось. Однако с тысячами строк и необходимостью форматирования я предпочел бы использовать INTO OUTFILE.

+0

Просьба показать определение вида. Вы также удалили «FIELDS TERMINATED» и т. Д., Правильно? – wallyk

+0

Я действительно, да. Я добавил инструкцию create view, поэтому вам не нужно просто взять слово за это. Вы видите что-то странное? –

+0

Все хорошо. Все, о чем я могу думать, состоит в том, что представление неверно определено путем ссылки на некоторые поля, которые не существуют. – wallyk

ответ

2

Эта нить становится немного старая, но она из далекой лучшей презентации нескольких (нераскрытых) постов на эту тему, так вот что я нашел:

Как вы можете предположим, поскольку ошибка появляется при добавлении части «в файл», недостающее разрешение - это доступ к файлам (и да, сообщение об ошибке вводит в заблуждение).

Действительно, если вы предоставите определителю вида глобальные привилегии FILE, ошибка исчезнет. (И это делает сообщение об ошибке ошибочным во втором порядке, так как похоже, что разрешения на вызове не имеют никакого отношения - хотя они должны, IMHO.)

0

Я бы попробовал просто запустить выбор без предварительного экспорта в файл. Select * от Outfile

+0

'SELECT * FROM view_name', я думаю, вы имеете в виду. Я подумал об этом, и сейчас я тестирую его. Он немного выполняет запрос. Благодарю. –

+0

OK, подтверждено. 'SELECT * FROM view_name' работает. Сейчас он сбрасывает тысячи строк в мою консоль. Очевидно, это не совсем то, что я хочу. Я отредактирую вопрос, чтобы указать, что он не работает на 'INTO OUTFILE' –

Смежные вопросы