Size: a a a

pgsql – PostgreSQL

2021 February 25

D

Dmitriy in pgsql – PostgreSQL
Александр Хакимов
у меня PHP код, который успевает запустить одну и ту же транзакцию 2 раза. и на уровне PHP это невозможно устранить
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
МММ, ну ты наверное мой проект лучше меня знаешь.
источник

ДТ

Дмитрий Тремасов... in pgsql – PostgreSQL
Александр Хакимов
МММ, ну ты наверное мой проект лучше меня знаешь.
ну вообще способы залочить скрипт от повторного запуска есть.
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Спасибо всем.
источник

ДТ

Дмитрий Тремасов... in pgsql – PostgreSQL
и в самом пыхе и при помощи какого нибудь flock
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Дмитрий Тремасов
ну вообще способы залочить скрипт от повторного запуска есть.
от повторного запуска кем? в рамках чего?
источник

ДТ

Дмитрий Тремасов... in pgsql – PostgreSQL
в рамках того что вам надо
источник

D

Dmitriy in pgsql – PostgreSQL
Александр Хакимов
МММ, ну ты наверное мой проект лучше меня знаешь.
В смысле? Если это php, то есть composer. Поставьте эту библиотеку и всё.
источник

ДТ

Дмитрий Тремасов... in pgsql – PostgreSQL
к сожалению ваш проект я не знаю, и понятия не имею как и что вы обрабатываете
источник

ДТ

Дмитрий Тремасов... in pgsql – PostgreSQL
но как бы знаю что это возможно
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
вот и закончим на этом. Если я обратился за локами то не просто так. За ответы спасибо.
источник

ДТ

Дмитрий Тремасов... in pgsql – PostgreSQL
ну просто в таком случае не стоит писать пхп не умеет локи. умеет.
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
ПХП умеет в локи, но по другим критериям.В моей конкретной ситуации этот вариант не подходит
источник

D

Dmitriy in pgsql – PostgreSQL
Александр Хакимов
ПХП умеет в локи, но по другим критериям.В моей конкретной ситуации этот вариант не подходит
Тогда не очень понятно, в чём был вопрос. Дело в том, что той библиотеке, что я выше скинул, можно подсунуть Redis в качестве провайдера (можно и свой написать - для Consul, например). И тогда одна и та же транзакция дважды никак не будет запущена.
источник

D

Dmitriy in pgsql – PostgreSQL
У моего проекта 6 или 8 инстансов, и я там так крон-таски синхронизирую
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Roman Poslavski
Ну например select data_type from xxx.information_schema.columns where table_name = ? and column_name = ?
Естественно такой запрос на отрабатывает, потому что вместо xxx.information_schema.columns должно быть information_schema.columns
Вы таки будете огорчены, но запросы из мыскля надо адаптировать под постгрес. И лазить в pg_catalog, который существенно информативнее information_schema без особой нужды не надо от слова совсем.
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Dmitriy
Тогда не очень понятно, в чём был вопрос. Дело в том, что той библиотеке, что я выше скинул, можно подсунуть Redis в качестве провайдера (можно и свой написать - для Consul, например). И тогда одна и та же транзакция дважды никак не будет запущена.
Смотри, какие варианты локов предлагает PHP
вариант 1 локать вызов PHP скрипта который запущен от какого либо пользователя.
вариант 2 локать вызов PHP скрипта в принципе если он уже запущен.


локать транзакцию какую то конкретную может только база , т.к. это уже её компетенция. Да, вызов лока в БД можно запустить через PHP , чем я сейчас и занимаюсь, но всё равно за это будет отвечать БД.

В моём конкретном случае у меня есть URL адрес на который постоянно идут запросы непрерывно, по очень много запросов в секунду. И делаю я вставку транзакции только в опеределенных случаях, и когда пользователь сделает определенный набор действий та же самая транзакция тоже вставляется.

Бывает так что инициировал пользователь и удаленный сервер вставку одновременно. Я не могу делать недоступной программу т.к. это вызовет огромные тормоза.
источник

D

Dmitriy in pgsql – PostgreSQL
Александр Хакимов
Смотри, какие варианты локов предлагает PHP
вариант 1 локать вызов PHP скрипта который запущен от какого либо пользователя.
вариант 2 локать вызов PHP скрипта в принципе если он уже запущен.


локать транзакцию какую то конкретную может только база , т.к. это уже её компетенция. Да, вызов лока в БД можно запустить через PHP , чем я сейчас и занимаюсь, но всё равно за это будет отвечать БД.

В моём конкретном случае у меня есть URL адрес на который постоянно идут запросы непрерывно, по очень много запросов в секунду. И делаю я вставку транзакции только в опеределенных случаях, и когда пользователь сделает определенный набор действий та же самая транзакция тоже вставляется.

Бывает так что инициировал пользователь и удаленный сервер вставку одновременно. Я не могу делать недоступной программу т.к. это вызовет огромные тормоза.
А если это сделать через очереди, и вставку транзакций делать в обработчике очереди? Тогда программа не будет недоступна для юзеров
источник

RP

Roman Poslavski in pgsql – PostgreSQL
Михаил Шурутов
Вы таки будете огорчены, но запросы из мыскля надо адаптировать под постгрес. И лазить в pg_catalog, который существенно информативнее information_schema без особой нужды не надо от слова совсем.
Я таки этого и боялся. А как тогда быть, если вы говорите, никуда не лазить, а data_type нужен?
источник

АХ

Александр Хакимов... in pgsql – PostgreSQL
Dmitriy
А если это сделать через очереди, и вставку транзакций делать в обработчике очереди? Тогда программа не будет недоступна для юзеров
Плохой вариант, я так уже делал. Надо это на лету выполнять а очередь строить должна сама база
источник