неизменяемый строгий игнорируется функцией plv8

#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. Я только пытался помочь. (Извините за это). Как вы заметили, я не могу комментировать (я не понимаю, почему, если я могу ответить …), Но вы правы. Возможно, это можно было бы лучше вставить в качестве комментария (чего я не могу сделать). Еще раз извините за попытку помочь.