#postgresql #postgresql-9.3 #plv8
#postgresql #postgresql-9.3 #plv8
Вопрос:
Я думал, что неизменяемое строгое улучшение базы данных не может быть изменено.
Следующее вставляет новую строку в ‘some_table’:
CREATE FUNCTION insert_row() RETURNS void AS
$
plv8.execute('INSERT INTO some_table (number) VALUES ($1)', [123]);
$
LANGUAGE plv8 IMMUTABLE STRICT;
Невозможно ли предотвратить функцию, изменяющую базу данных?
Комментарии:
1. Категория изменчивости функции — это в основном обещание, которое ваша функция дает PostrgreSQL, ваша функция может лгать, но вы не должны ожидать от этого ничего хорошего.
2. Вы правы. Спасибо
Ответ №1:
Для меня это работает так, как ожидалось.
Если я выполню что-то вроде:
select insert_row() from some_OTHER_table;
Я получаю РОВНО одну новую строку в some_table независимо от количества строк в some_other_table.
Если вы не хотите, чтобы ваша функция изменяла вашу базу данных, просто НЕ помещайте в нее инструкции insert или update.
Комментарии:
1. Я только пытался помочь. (Извините за это). Как вы заметили, я не могу комментировать (я не понимаю, почему, если я могу ответить …), Но вы правы. Возможно, это можно было бы лучше вставить в качестве комментария (чего я не могу сделать). Еще раз извините за попытку помочь.