Функция Google CloudSQL 2-го поколения не работает
Для экземпляра Google CloudSQL 2-го поколения с включенной функцией отказоустойчивой репликации. После этого при попытке импортировать базу данных она не позволяет создать процедуру. Получение ниже ошибки.
Код ошибки: 1419. У вас нет привилегии SUPER, и двоичное ведение журнала включено (вы можете использовать менее безопасную переменную log_bin_trust_function_creators)
Правда ли, что CloudSQL с аварийным переключением не будет поддерживать функцию?
Пример выполнения запроса
DELIMITER ;;
CREATE FUNCTION `stutzen`(amount INT) RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE charges FLOAT DEFAULT 1.0;
SELECT valuesettings INTO charges FROM dreamer_tbl WHERE namesettings='stutzen.co';
RETURN FLOOR((amount / 100) * charges) ;
END ;;
DELIMITER ;
4 ответа
Вам просто нужно установить 'log_bin_trust_function_creators' на ON
Для этого откройте https://console.cloud.google.com/
Выберите SQL
Выберите свой экземпляр
Выберите РЕДАКТИРОВАТЬ
Сигналы БД
Добавить: log_bin_trust_function_creators on
general_log on
СПАСТИ
Вы должны запустить:
gcloud sql instances patch [INSTANCE_NAME] --database-flags
log_bin_trust_function_creators=ON
как упомянуто здесь
Google Cloud SQL поддерживает как хранимые процедуры, так и функции.
В вашем случае проблема заключается в том, что вы пытаетесь импортировать файл sql, в котором есть какая-то подпрограмма, для которой требуется привилегия SUPER, а это недопустимо.
Это не хранимая процедура, это определяемая пользователем функция. Вам нужно будет переписать этот UDF как хранимую процедуру, которая будет работать.
Я попытался использовать SET GLOBAL log_bin_trust_function_creators, которые должны позволять создавать функции без привилегии SUPER, но установка этой переменной также не разрешена в Cloud SQL. Для его настройки требуется привилегия SUPER.