
Артур
01.03.2017
09:28:59
"D" в ACID разве не об этом?

Kirill
01.03.2017
09:29:23
нет

Артур
01.03.2017
09:31:19
Подитог:
Durability - обеспечивается как самой СУБД, так и программистом,
Программист должен думать о гарантии исполнения атомарной транзакции. И если таковая не проихошла либо разбирать данный момент, либо повторить её, для записи

Google

Артур
01.03.2017
09:31:40
Верно?

Fike
01.03.2017
09:32:57
программист не является частью всей этой системы, он только взаимодействует с ее выводом
он управляет durability на уровне приложения, но не на уровне БД. т.е. он должен предоставлять гарантии, что при возврате сообщения об успехе операции она не исчезла, но это на уровне приложения, а на уровне БД он только считывает возможные варианты ответа
Господи, как же я косноязычен. В общем, ACID - это свойства только базы данных, пользователь должен знать о них и понимать, о чем ему говорит БД, но непосредственно в самих процессах он участия не принимает (хоть и может корректировать их поведение).

Артур
01.03.2017
09:36:01
Ясно. Спасибо за коллетивное разъяснение. -1 рука из жопы :)

Андрей
01.03.2017
09:36:33
Верно?
Думаю, что если в серьёз задумались, то лучше это почитать:
https://postgrespro.ru/docs/postgresql/9.6/high-availability.html
Тут перемежаются области программирования и администрирования
Вам то скажут тут
как в общих чертах оно есть, но как конкретно у Вас настроил кто-то сервер
может сильно повлиять на Ваши ожидания/уверенность
о сохранности данных


Артур
01.03.2017
09:42:04
Думаю, что если в серьёз задумались, то лучше это почитать:
https://postgrespro.ru/docs/postgresql/9.6/high-availability.html
Спасибо.
Я задумался по нескольким причинам.
1. База с которой я работаю - взаимодействует с 5 сервисами. Она не только отдает данные, но и получает от них. Все эти сервисы работаюют либо как тонкий клиент, либо как самостоятельное приложение с собственной БД работающий через API.
2. Некоторые таблицы используются крайне часто для SELECT (например база адресов), а некоторые только для INSERT (например история изменения строк)
3. В неокторых таблицах важно, чтобы ни одна операция не потерялась. Конечно это не фин операции, но если работа менеджера потеряется - звонить клиенту опять не получится.
4. Производительность сейчас обеспечивается встроенным функционалом postgres + добавлением нужных индексов.
5. Сейчас реже, но раньше сервак уходил в глухую оборону (если, например брутфорсили активно).
Вроде разносторонние проблемы. Но упираются они все равно в БД.
И если, например, целостность данных не настолько критична, всеравно с каждым днем важность растет. А я не хочу ждать пока по голове хлопнет проблемой и пытаюсь думать об этом наперед.
Ну и потом. В этом мире все сталкиваются с чужими ТВАРеньями. А значит вполне может возникнуть ситуация, когда вы будет ковыряться в каше и думать обо мне нехорошо ?
Больше всего нехочу этого :)
Поэтому еще раз спасибо за ссылки и консультацию

Google

Андрей
01.03.2017
09:52:40
Вроде разносторонние проблемы. Но упираются они все равно в БД.
И если, например, целостность данных не настолько критична, всеравно с каждым днем важность растет. А я не хочу ждать пока по голове хлопнет проблемой и пытаюсь думать об этом наперед.
Ну и потом. В этом мире все сталкиваются с чужими ТВАРеньями. А значит вполне может возникнуть ситуация, когда вы будет ковыряться в каше и думать обо мне нехорошо ?
Больше всего нехочу этого :)
да, надо думать, читать, думать, крутить настройки,
придумывать как сделать лучше, но на это как правило
уйма времени надо тратить, а онного у всех напряг,
тут более простой путь админа найти хорошего,
шарящего в постресе и люябщего его администрировать, и ему парить мозг чтобы работало
быстрее, чтобы репликация работала чётко и прочее...


Akzhan
01.03.2017
09:53:02
брутфорс решается наполовину админресурсом. Большая часть паттернов закрывается на уровне "до приложения" через denyhosts etc.
В любом случае к БД это доходить не должно
И да, в большинстве случаев репликация не должна быть критерием завершенности транзакции, то есть вполне допустима ее асинхронность

Артур
01.03.2017
11:40:56
Еще вопрос. Я запустил удаление по критериям. Из 10 000 000 будет удалено 9 500 000 строк.
Судя по тому что количество записей не изменилось, а удаление происходит уже час - удаление выполняется атомарно.
Я прав?

Evgeniy
01.03.2017
11:41:32
конечно

Артур
01.03.2017
11:42:19
А как сделать чтобы это работало налету?
Или это бред?

Evgeniy
01.03.2017
11:43:53
а в чем твоя проблема-то?

Ildar
01.03.2017
11:45:27

lemi
01.03.2017
11:45:44
create table temp_myTable as select * from mytable where rows_should_not_be_delete
truncate table mytable
alter table temp_mytable rename to mytable;
но там еще индексы пересозданть/, и constraint нужно будет доделать

Артур
01.03.2017
11:46:38
хм... а почему удаление дольше создания?

Darafei
01.03.2017
11:47:10
потому что в удалении тебе надо в 9 500 000 строк написать, что они больше не видны

Evgeniy
01.03.2017
11:47:21
а потом сделать репак)

Ildar
01.03.2017
11:47:34

lemi
01.03.2017
11:47:43
можно и так

Артур
01.03.2017
11:48:12

Ildar
01.03.2017
11:48:26

Google

Айтуар
01.03.2017
11:49:31
А можно дропнуть индексы, и потом удаление сделать, и после создать заново индексы.

Ildar
01.03.2017
11:49:40
это типа с индексами?
ага, копирует полностью структуру таблицы. За исключением каких-то options-ов типа fillfactor и т.п.

Айтуар
01.03.2017
11:49:48
Но всё же быстрее в новую таблицу скопировать

Darafei
01.03.2017
11:50:04
ещё лучше эти строки просто не писать в ту таблицу

Артур
01.03.2017
11:50:08
create table temp_myTable (like mytable including all) as select * from mytable where ...
Вот так получится. Верно?

lemi
01.03.2017
11:51:38
сериал это синтакически сахар оберка вокрут nextval('seq_name')

Артур
01.03.2017
11:52:20
ну проще говоря id тоже перенесутся без проблем и не с единицы
Я в свое время сталкивался что если в serial давать произвольный int - он ругался

lemi
01.03.2017
11:52:55
я там ошибся вместо truncate table
там
begin;
drop table myTable;
alter table temp_myTable renamte to myTable;
end;

Ildar
01.03.2017
11:54:56

Артур
01.03.2017
11:56:33

Артур
01.03.2017
11:56:41

lemi
01.03.2017
11:58:05
explain ?

Артур
01.03.2017
11:59:53
ну вот неделю назад приучился всё страшное и непонятное через эксплейн делать. :)

Darafei
01.03.2017
12:01:02
у датагрипа хороший хайлайтер синтаксиса

Артур
01.03.2017
12:01:22
ну он и подсвечивает ошибку

Darafei
01.03.2017
12:01:22
если он что-то подчёркивает, то скорее всего оно невалидная конструкция

Артур
01.03.2017
12:01:32

Darafei
01.03.2017
12:02:03
там опечатка, t в rename лишняя

Google

lemi
01.03.2017
12:02:09

Ildar
01.03.2017
12:02:25
если я не ошибаюсь, то CREATE TABLE AS это не та же самая команда, что и обычный CREATE TABLE. Поэтому сначала CREATE TABLE .. (LIKE ...). А потом INSERT INTO temp_myTable SELECT <ваш селект>

Артур
01.03.2017
12:02:47
ясно
Вроде датагрип не ругается

Darafei
01.03.2017
12:06:34
на вид да
я обычно разворачиваю наоборот, как-то вроде
begin;
create temporary table aaa as (select * from mytable where ....);
truncate mytable;
insert into mytable select * from aaa;
commit;
тогда таблица точно-точно остаётся той же самой :)

Артур
01.03.2017
12:08:04
это мне больше нравится. lemi gi, без обид. Твоя тоже клевая :)

Admin
ERROR: S client not available

Артур
01.03.2017
12:17:21
@Komzpa
Ну или с Товальдcом... без разницы к кому взывать

Anton [Mgn, az09@osm]
01.03.2017
12:23:48
главное что б бекап был

Артур
01.03.2017
12:24:09
Я бэкап разворачивать буду минут 20-30
Вроде это все в рамках одной операции, поэтому если где облом - откатится всё... кажись
Но это никак не спасет, если в логике баг :)
не тот смайл. :(
1 косяк нашёл. в запросе ? Но вот эти самые транзакции спасли
спасибо

Google

Ildar
01.03.2017
12:27:40

Darafei
01.03.2017
12:28:21
select a.* from mods_monitoring_arguments a join mods_monitoring b on a.sub=b.id

Артур
01.03.2017
12:29:35

Darafei
01.03.2017
12:30:39
с джоинами у планнера есть больше вариантов выворачивания сканов
иногда это хорошо, иногда нежелательно

Anatoliy
01.03.2017
12:31:07
Вложенный запрос с таким же связью полей разложится в джойн, как выше.
*планировщиком

Артур
01.03.2017
12:33:26
После ctrl+c выбивает

Darafei
01.03.2017
12:33:56
сделай rollback; и начни с начала

Артур
01.03.2017
12:37:28
Ну так, наглядности ради. тут же есть еще ~800 человек
Чето вложенный селект вообще долгий
план уже минуты 3 крутит

Darafei
01.03.2017
12:49:24
explain, не explain analyse

Артур
01.03.2017
12:50:59
Сравнение
https://explain.depesz.com/s/v0r4
https://explain.depesz.com/s/i0Yz

lemi
01.03.2017
12:53:15
in (и здесь 500тыс ) ? :)

Артур
01.03.2017
12:55:48
да :)

Andrew
01.03.2017
12:57:45
Добрый день
подскажите пожалуйста
ON DUPLICATE KEY UPDATE -в mysql = CONFLICT в постгре? верно же?
просто переписывал sql запрос с mysql на постгрю и выгорает теперь вот такая проблема
missing FROM-clause entry for table "tablename"
в этом месте
insert my_table (id , ... , last_col) select id , ... last_col from tablename where tablename.picture is not null
ON CONFLICT (id) DO UPDATE SET my_table.price = tablename.price <-- вот тут ошибка получается
подскажите что не так пожалуйста