Вы можете просмотреть PostgreSQL JDB C драйвер на github . Реализация Connection.setReadOnly указывает, что при вызове этого метода в базу данных отправляется один из следующих SQL операторов:
SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY
или
SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE
Теперь, если мы будем читать PostgreSQL ссылка , это указывает:
Режим доступа к транзакции определяет, будет ли транзакция доступной только для чтения / записи или только для чтения. Чтение / запись по умолчанию. Когда транзакция доступна только для чтения, следующие команды SQL запрещены: INSERT, UPDATE, DELETE и COPY FROM, если таблица, в которую они будут записывать, не является временной таблицей; все команды CREATE, ALTER и DROP; КОММЕНТАРИЙ, ГРАНТ, ОТЗЫВ, ТРАНСКАТ; и EXPLAIN ANALYZE и EXECUTE, если команда, которую они будут выполнять, входит в число перечисленных. Это высокоуровневое понятие «только для чтения», которое не предотвращает все записи на диск.
Таким образом, основное преимущество заключается в том, что вы не сможете случайно изменить данные. Это похоже на использование Collections.unmodifiableList
и, как правило, приводит к более устойчивому коду, поэтому, если вы уверены, что данная транзакция предназначена только для чтения, используйте это свойство.