Функция 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.

Другие вопросы по тегам