Давным-давно я написал класс php, который обрабатывает соединения postgresql db.
Я добавил транзакции к моим функциям вставки / обновления, и это работает отлично для меня. Но недавно я узнал о функции «pg_prepare».
Я немного смущен тем, что делает эта функция, и если будет лучше переключиться на нее.
В настоящее время всякий раз, когда я делаю вставку / обновление, мой sql выглядит так:
$transactionSql = "PREPARE TRANSACTION ".md5(time()).";" .$theUpdateOrDeleteSQL.";". ."COMMIT;"; This will return something like: PREPARE TRANSACTION '4601a2e4b4aa2632167d3cc62b516e6d'; INSERT INTO users (username,g_id,email,password) VALUES('test', '1', 'test','1234'); COMMIT;
Я структурировал свою базу данных с отношениями, и я использую (когда это возможно):
ON DELETE CASCADE ON UPDATE CASCADE
Но я хочу быть на 100% уверенным, что в базе данных все чисто, и при обновлении / удалении или вставке нет остатков, если / когда есть сбой.
Было бы неплохо, если бы вы могли поделиться своим мнением / опытом о pg_prepare, мне действительно нужно «подготовить транзакцию» и любые другие дополнения, которые могли бы мне помочь? 🙂
Нет, вам не нужна подготовка транзакции (предназначенная для распределенных транзакций на разных серверах, как уже указывал Милен).
Я не уверен, как это работает с интерфейсом PHP, но до тех пор, пока вы можете убедиться, что вы не работаете в режиме автоматической фиксации, все должно быть хорошо.
Если вы не можете управлять режимом автоматической фиксации, просто поместите свои заявления в блок BEGIN … COMMIT
Нет, вам не нужна 2-х фазовая фиксация! …
Для безопасной обработки баз данных PHP не используйте pg_query напрямую, а переносите ее в специальную функцию, которая выполняет следующие действия:
Таким образом, если ваш скрипт сработает или что-то еще, откат будет выдаваться автоматически. Вы можете совершать транзакции только путем явного ввода.
Если вы используете постоянные подключения, будьте осторожны: обработка php pg_pconnect немного … ошибка.