いくつかのビューに基づいて計算を行い、結果をファイルに書き込むクエリを実行しています。次のようになります。
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
私はルートとして実行しているので、権利の問題はないと思います。MySQL の観点から、このクエリを無効にしているのは何でしょうか? バージョン 5.5.32-0ubuntu0.12.04.1 (Ubuntu) を実行しています
編集:実行SELECT * FROM view_name
すると、期待どおりにレコードが返されます。ただし、何千もの行があり、しっかりとした書式設定が必要な場合は、むしろINTO OUTFILE
.