Re: different errors on master and slave. Error on master: message (format)='View '%.192s.%.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them' error code=1356 ; Error on slave: actual message='no error'
Okay, I could reproduce it.
Run as SQL:
=== SQL BEGIN ===
CREATE DATABASE `test` /*!40100 CHARACTER SET utf8 COLLATE 'utf8_general_ci' */;
USE `test`;
CREATE TABLE `a` (
`id` INT(10) NOT NULL,
`something` VARCHAR(50) NULL,
PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=Aria;
CREATE TABLE `b` (
`id` INT(10) NOT NULL,
`number` INT(10) NULL,
PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=Aria;
CREATE TABLE `master` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`col2` INT(10) NULL DEFAULT '0',
`col3` INT(10) NULL DEFAULT '0',
`col4` VARCHAR(50) NULL DEFAULT '0',
PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=Aria;
CREATE TABLE `v` (
`id` INT(10) NULL,
`Column 2` INT(10) NULL,
`Column 3` INT(10) NULL,
`Column 4` INT(10) NULL,
PRIMARY KEY (`id`)
) COLLATE='utf8_general_ci' ENGINE=Aria;
CREATE ALGORITHM = MERGE DEFINER=`root`@`localhost` VIEW `view` AS SELECT id,col2,col3,col4,something,number,`Column 2`,`Column 4`
FROM master LEFT JOIN a USING(id) LEFT JOIN b USING(id) LEFT JOIN v USING(id) ;
CREATE DATABASE `test2` /*!40100 CHARACTER SET utf8 COLLATE 'utf8_general_ci' */;
USE `test2`;
CREATE TABLE `stats` (
`id` INT(10) NOT NULL DEFAULT '0',
`fa` INT(10) NULL DEFAULT NULL,
`fb` INT(10) NULL DEFAULT NULL,
`fc` VARCHAR(50) NULL DEFAULT NULL,
`fd` VARCHAR(50) NULL DEFAULT NULL,
`fe` INT(10) NULL DEFAULT NULL,
`ff` INT(10) NULL DEFAULT NULL,
`fg` INT(10) NULL DEFAULT NULL
) COLLATE='utf8_general_ci' ENGINE=Aria;
USE test;
=== SQL END ===
Now, create the trigger:
CREATE TRIGGER `t_v` AFTER UPDATE ON `v` FOR EACH ROW BEGIN
REPLACE INTO test2.stats (id,fa,fb,fc,fd,ff)
SELECT id,col2,col4,something,`Column 2`,1
FROM view WHERE NEW.id=id;
END;
And run more SQL:
=== SQL BEGIN ===
INSERT INTO `master` (`col2`, `col3`, `col4`) VALUES (1, 2, '3');
INSERT INTO `master` (`col2`, `col3`, `col4`) VALUES (3, 4, '6');
INSERT INTO `master` (`col2`, `col3`) VALUES (33, 2);
INSERT INTO `v` (`id`, `Column 2`, `Column 3`, `Column 4`) VALUES (1, 123, 234, 345);
INSERT INTO `v` (`id`, `Column 2`, `Column 3`, `Column 4`) VALUES (2, 123, 234, 345);
INSERT INTO `v` (`id`, `Column 2`, `Column 3`, `Column 4`) VALUES (3, 123, 234, 345);
INSERT INTO `a` (`id`, `something`) VALUES (1, 'It');
INSERT INTO `a` (`id`, `something`) VALUES (2, 'is');
INSERT INTO `a` (`id`, `something`) VALUES (3, 'OK');
INSERT INTO `b` (`id`, `number`) VALUES (1, 2);
INSERT INTO `b` (`id`, `number`) VALUES (2, 6);
INSERT INTO `b` (`id`, `number`) VALUES (3, 5);
/* Do some update to start TRIGGER */
UPDATE `v` SET `Column 2`=2 WHERE `id`=3 LIMIT 1;
/* ALTER COLUMN NAME IN TABLE */
ALTER TABLE `a` CHANGE COLUMN `something` `else` VARCHAR(50) NULL DEFAULT NULL AFTER `id`;
/* ALTER COLUMN NAME IN CORRESPONDING VIEW */
ALTER DEFINER=`root`@`localhost` VIEW `view` AS SELECT id,col2,col3,col4,`else`,number,`Column 2`,`Column 4`
FROM master LEFT JOIN a USING(id) LEFT JOIN b USING(id) LEFT JOIN v USING(id) ;
/* Do some update to start TRIGGER again*/
UPDATE `v` SET `Column 2`=15 WHERE `id`=3 LIMIT 1;
=== SQL END ===
My MariaDB server throws SQL error 1356: View 'test.view' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
While
UPDATE `v` SET `Column 2`=15 WHERE `id`=3 LIMIT 1;
produces the error, doing a
SELECT * FROM view
is working fine:
/* Affected rows: 0 Found rows: 3 Warnings: 0 Duration for 1 query: 0,016 sec. */
Can you confirm?
Re: different errors on master and slave. Error on master: message (format)='View '%
.192s.%.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them' error code=1356 ; Error on slave: actual message='no error'Hi,
> "Vorgangsliste" is a table that triggers some views on update or on insert,
> but none of these triggers have references to the changed table.
I'm not quite sure I understand what you mean by this.
Are you saying that "UPDATE Vorgangsliste" complains about invalid references in some view X, even although neither the UPDATE itself, nor any triggers on Vorgangsliste, nor any secondary triggers which might be activated by this statement use this view?