Postgresql query tuning

Easbayguy
Уже с Приветом
Posts: 10599
Joined: 17 Jul 2003 22:11

Re: Postgresql query tuning

Post by Easbayguy »

oleg lebedev wrote:
Ljolja wrote:
oleg lebedev wrote: Если у вас был опыт с Ораклом, то будете впечатлены ещё больше. Postgres даёт полное понимание что такое транзакция. Если в вашей функции есть truncate или даже drop таблицы и вы это уже апроизвели, то вы всё равно сможете откатить транзакцию и всё восстановится как и прежде.
если произвели с kоммитом или авто коммитом, то все, что сделано, то сделано, восстановится только из бакапа или я чего-то недопоняла ?
Вы что-то недопоняли.
Backup тут совсем не причём. Мы говорили про транзакции, а это совсем другое.

Commit - это завершение транзакциии. Есть ещё другой способ завершить транзакцию. Это - rollback. В этом случае всё возвращается в исходную позицию, как до начала транзакции. Oracle и Postgres по разному это понимают. Postgres - это multiversion база и её понимание, что такое транзакция намного более глубокое, чем у Oracle. Посмотрите псевдокод:

transaction start
-- table T exists in both Oracle and PostgreSql
drop table T;
-- table T doesn't exists in either Oracle or PostgreSql
rollback;
-- transaction finished

-- table T exists in PostgreSql
-- table T doesn't exists in Oracle

Oracle говорит, мол что DDL (drop, truncate и пр.) - это не DML и не подлежит откату. Возможно это соответствует SQL стандарту, но Postgres - идёт дальше в этом деле.
Oracle подрaзuмевает более серьезное отнощение к работе! Что значит дропнул табличку случайно?!
Возможности постгреса связаны с тем что народ использует очень маленькие обьемы данных.
Для восстановления случайно удалленных табличек использюутся нетрансакционные механизмы:Flashback and recyclebin;
Пх'нглуи мглв'нафх Ктулху Р'лайх угахнагл фхтагн
User avatar
oleg lebedev
Уже с Приветом
Posts: 1872
Joined: 03 Dec 2003 23:13
Location: Одесса - Новая Англия

Re: Postgresql query tuning

Post by oleg lebedev »

Вы бы не говорили бы такие глупости. Смешно даже читать.
Вы ведь тоже имеете какое-то отношение к базам данных, если решили здесь высказать своё мнение.
Вы не понимаете предмета обсуждения. Это вообще не имеет отношения к случайно удалённым таблицам. Это относится к ситуации когда drop table - это часть нормального процесса, но если возникла необходимость мы всё можем вернуть назад. Это может быть часть бизнесс логики.
Про серьёзность отношения и маленькие таблички - то мне не хочется комментировать из-за обсурдности ваших суждений.
Easbayguy
Уже с Приветом
Posts: 10599
Joined: 17 Jul 2003 22:11

Re: Postgresql query tuning

Post by Easbayguy »

oleg lebedev wrote:Вы бы не говорили бы такие глупости. Смешно даже читать.
Вы ведь тоже имеете какое-то отношение к базам данных, если решили здесь высказать своё мнение.
Вы не понимаете предмета обсуждения. Это вообще не имеет отношения к случайно удалённым таблицам. Это относится к ситуации когда drop table - это часть нормального процесса, но если возникла необходимость мы всё можем вернуть назад. Это может быть часть бизнесс логики.
Про серьёзность отношения и маленькие таблички - то мне не хочется комментировать из-за обсурдности ваших суждений.
Эк вас заколбасило. :D
Пх'нглуи мглв'нафх Ктулху Р'лайх угахнагл фхтагн
User avatar
oleg lebedev
Уже с Приветом
Posts: 1872
Joined: 03 Dec 2003 23:13
Location: Одесса - Новая Англия

Re: Postgresql query tuning

Post by oleg lebedev »

А что вам ещё оставалось сказать в этой ситуации?
User avatar
Likenew
Уже с Приветом
Posts: 12059
Joined: 15 Feb 2002 10:01
Location: TX

Re: Postgresql query tuning

Post by Likenew »

oleg lebedev wrote:Орацле говорит, мол что ДДЛ (дроп, трунцате и пр.) - это не ДМЛ и не подлежит откату. Возможно это соответствует СЪЛ стандарту, но Постгрес - идёт дальше в этом деле.
Пральна все в оракле, там аутокоммит есть в ДДЛ. И раньше было очень строго, сейчас все-таки есть защита от дурака и флешбеком можно вернуть табличку недорого. Так шта недалекo постгрес ушел, но оракл стоит дороже, думаю из-за строгости его нравов :wink:
Easbayguy
Уже с Приветом
Posts: 10599
Joined: 17 Jul 2003 22:11

Re: Postgresql query tuning

Post by Easbayguy »

oleg lebedev wrote:А что вам ещё оставалось сказать в этой ситуации?
Вы похоже евангелист, а не разработчик.
Пх'нглуи мглв'нафх Ктулху Р'лайх угахнагл фхтагн
User avatar
oleg lebedev
Уже с Приветом
Posts: 1872
Joined: 03 Dec 2003 23:13
Location: Одесса - Новая Англия

Re: Postgresql query tuning

Post by oleg lebedev »

Likenew wrote:
oleg lebedev wrote:Орацле говорит, мол что ДДЛ (дроп, трунцате и пр.) - это не ДМЛ и не подлежит откату. Возможно это соответствует СЪЛ стандарту, но Постгрес - идёт дальше в этом деле.
Пральна все в оракле, там аутокоммит есть в ДДЛ. И раньше было очень строго, сейчас все-таки есть защита от дурака и флешбеком можно вернуть табличку недорого. Так шта недалекo постгрес ушел, но оракл стоит дороже, думаю из-за строгости его нравов :wink:
Это не имеет никакого отношения к flashback.
User avatar
Ljolja
Уже с Приветом
Posts: 2924
Joined: 01 Apr 2004 04:22

Re: Postgresql query tuning

Post by Ljolja »

т.е. Вы хотите сказать, что в орацле нет много-командных транзакций, любая команда идет как транзакция с автокомитом?
Я боюсь, что наступит день, когда технологии превзойдут простое человеческое обшение. И мир получит поколение идиотов (c)
User avatar
Ljolja
Уже с Приветом
Posts: 2924
Joined: 01 Apr 2004 04:22

Re: Postgresql query tuning

Post by Ljolja »

Easbayguy wrote: Oracle подрaзuмевает более серьезное отнощение к работе! Что значит дропнул табличку случайно?!
Возможности постгреса связаны с тем что народ использует очень маленькие обьемы данных.
:lol: и что же ето за возможности?
Easbayguy wrote: Для восстановления случайно удалленных табличек использюутся нетрансакционные механизмы:Flashback and recyclebin;
ето утверждение опровергает 1-е: "Oracle подрaзuмевает более серьезное отнощение к работе". И по моим воспоминаниям , v oracle требуются доп. усилия что бы избавиться от мусора в базе, по умолчанию он идет в "накопитель", зато потом если "случайно" дропнул таблицу, она все равно еше в базе и ее можно извлечь из мусора. К сожаланию, разработчики oracle очень мало думают об ограниченности ресурсов.
Я боюсь, что наступит день, когда технологии превзойдут простое человеческое обшение. И мир получит поколение идиотов (c)
Easbayguy
Уже с Приветом
Posts: 10599
Joined: 17 Jul 2003 22:11

Re: Postgresql query tuning

Post by Easbayguy »

А потом жалются что их на интервью до слез доводят. :great:
Пх'нглуи мглв'нафх Ктулху Р'лайх угахнагл фхтагн
User avatar
oleg lebedev
Уже с Приветом
Posts: 1872
Joined: 03 Dec 2003 23:13
Location: Одесса - Новая Англия

Re: Postgresql query tuning

Post by oleg lebedev »

Ljolja wrote:т.е. Вы хотите сказать, что в орацле нет много-командных транзакций, любая команда идет как транзакция с автокомитом?
Oracle поддерживает транзакции только для DML (ins,upd,del) в то время как Postgres идёт гораздо дальше этого и поддерживает DDL в транзакции. Это принципиально более высокий уровень, который не по плечу Oracle.
Easbayguy
Уже с Приветом
Posts: 10599
Joined: 17 Jul 2003 22:11

Re: Postgresql query tuning

Post by Easbayguy »

oleg lebedev wrote:
Ljolja wrote:т.е. Вы хотите сказать, что в орацле нет много-командных транзакций, любая команда идет как транзакция с автокомитом?
Oracle поддерживает транзакции только для DML (ins,upd,del) в то время как Postgres идёт гораздо дальше этого и поддерживает DDL в транзакции. Это принципиально более высокий уровень, который не по плечу Oracle.
However practically any DDL will get an ACCESS EXCLUSIVE lock on the target object, making it completely inaccessible until the DDL transaction finishes. CREATE INDEX ... CONCURRENTLY is exceptional, it uses three transactions to add an index to a table while allowing concurrent updates, so it cannot itself be performed in a transaction.
Tip: Only an ACCESS EXCLUSIVE lock blocks a SELECT (without FOR UPDATE/SHARE) statement.
Пх'нглуи мглв'нафх Ктулху Р'лайх угахнагл фхтагн
User avatar
oleg lebedev
Уже с Приветом
Posts: 1872
Joined: 03 Dec 2003 23:13
Location: Одесса - Новая Англия

Re: Postgresql query tuning

Post by oleg lebedev »

Easbayguy wrote:
oleg lebedev wrote:
Ljolja wrote:т.е. Вы хотите сказать, что в орацле нет много-командных транзакций, любая команда идет как транзакция с автокомитом?
Oracle поддерживает транзакции только для DML (ins,upd,del) в то время как Postgres идёт гораздо дальше этого и поддерживает DDL в транзакции. Это принципиально более высокий уровень, который не по плечу Oracle.
However practically any DDL will get an ACCESS EXCLUSIVE lock on the target object, making it completely inaccessible until the DDL transaction finishes. CREATE INDEX ... CONCURRENTLY is exceptional, it uses three transactions to add an index to a table while allowing concurrent updates, so it cannot itself be performed in a transaction.
Tip: Only an ACCESS EXCLUSIVE lock blocks a SELECT (without FOR UPDATE/SHARE) statement.
Зачем вы это написали?
Easbayguy
Уже с Приветом
Posts: 10599
Joined: 17 Jul 2003 22:11

Re: Postgresql query tuning

Post by Easbayguy »

oleg lebedev wrote:
Easbayguy wrote:
oleg lebedev wrote:
Ljolja wrote:т.е. Вы хотите сказать, что в орацле нет много-командных транзакций, любая команда идет как транзакция с автокомитом?
Oracle поддерживает транзакции только для DML (ins,upd,del) в то время как Postgres идёт гораздо дальше этого и поддерживает DDL в транзакции. Это принципиально более высокий уровень, который не по плечу Oracle.
However practically any DDL will get an ACCESS EXCLUSIVE lock on the target object, making it completely inaccessible until the DDL transaction finishes. CREATE INDEX ... CONCURRENTLY is exceptional, it uses three transactions to add an index to a table while allowing concurrent updates, so it cannot itself be performed in a transaction.
Tip: Only an ACCESS EXCLUSIVE lock blocks a SELECT (without FOR UPDATE/SHARE) statement.
Зачем вы это написали?
Я не могу назвать поддержкой ДДЛ в транзакции, когда для остальных сессий/пользователей табличка исчезнет.
То есть в реальности постгресс при издании команды DROP переименовывает табличку и соответсвенно при commit, удаляет ее навсегда, а при rollback переименовывает ее обратно. То есть то что нормальные разработчики и так делают с исползованием alter table rename... при серьезных изменениях.
Пх'нглуи мглв'нафх Ктулху Р'лайх угахнагл фхтагн
User avatar
Likenew
Уже с Приветом
Posts: 12059
Joined: 15 Feb 2002 10:01
Location: TX

Re: Postgresql query tuning

Post by Likenew »

oleg lebedev wrote:
Likenew wrote:
oleg lebedev wrote:Орацле говорит, мол что ДДЛ (дроп, трунцате и пр.) - это не ДМЛ и не подлежит откату. Возможно это соответствует СЪЛ стандарту, но Постгрес - идёт дальше в этом деле.
Пральна все в оракле, там аутокоммит есть в ДДЛ. И раньше было очень строго, сейчас все-таки есть защита от дурака и флешбеком можно вернуть табличку недорого. Так шта недалеко постгрес ушел, но оракл стоит дороже, думаю из-за строгости его нравов
Это не имеет никакого отношения к флашбацк.
Мне каецца очень логично для ДДЛ иметь аутокоммит, типа транзакция сама в себе. Флешбецк имеет отношение, чтобы им воспользоваться им, ввели то же самое, не удаление нафиг таблички, а ее переименование, чтобы если кто-то долго чешется, то мог вернуть все взад.
User avatar
Likenew
Уже с Приветом
Posts: 12059
Joined: 15 Feb 2002 10:01
Location: TX

Re: Postgresql query tuning

Post by Likenew »

Easbayguy wrote:
oleg lebedev wrote:
Easbayguy wrote:
oleg lebedev wrote:
Ljolja wrote:т.е. Вы хотите сказать, что в орацле нет много-командных транзакций, любая команда идет как транзакция с автокомитом?
Орацле поддерживает транзакции только для ДМЛ (инс,упд,дел) в то время как Постгрес идёт гораздо дальше этого и поддерживает ДДЛ в транзакции. Это принципиально более высокий уровень, который не по плечу Орацле.
Хошевер працтицаллы аны ДДЛ шилл гет ан АЦЦЕСС ЕХЦЛУСИВЕ лоцк он тхе таргет обйецт, макинг ит цомплетелы инаццессибле унтил тхе ДДЛ трансацтион финишес. ЦРЕАТЕ ИНДЕХ ... ЦОНЦУРРЕНТЛЫ ис ехцептионал, ит усес тхрее трансацтионс то адд ан индех то а табле шхиле аллошинг цонцуррент упдатес, со ит цаннот итселф бе перформед ин а трансацтион.
Тип: Онлы ан АЦЦЕСС ЕХЦЛУСИВЕ лоцк блоцкс а СЕЛЕЦТ (шитхоут ФОР УПДАТЕ/ШАРЕ) статемент.
Зачем вы это написали?
Я не могу назвать поддержкой ДДЛ в транзакции, когда для остальных сессий/пользователей табличка исчезнет.
То есть в реальности постгресс при издании команды ДРОП переименовывает табличку и соответсвенно при цоммит, удаляет ее навсегда, а при роллбацк переименовывает ее обратно. То есть то что нормальные разработчики и так делают с исползованием алтер табле ренаме... при серьезных изменениях.
Так типо вопрос, а в постгресе есть временные таблички, которые как в оракле исчезают когда сессия закончилась? Если есть, то все навороты в аппликации с созданием и удалением таблиц == плохое решение :pain1:
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Postgresql query tuning

Post by Интеррапт »

Likenew wrote: Так типо вопрос, а в постгресе есть временные таблички, которые как в оракле исчезают когда сессия закончилась?
Есть (CREATE TEMPORARY ... [ON COMMIT]). В двух режимах - те, которые исчезают после того, как завершилась сессия юзера и те (ON COMMIT) которые исчезают после завершения транзакции. Но там есть отличия от стандарта, которые нужно иметь в виду - в стандарте можно один раз обьявить временную таблицу и она будет создаваться/удаляться, а в Постгрессе каждая сессия должна сама явно вызывать CREATE TEMPORARY (что фактически позволяет в различных сессиях создавать временные таблицы с одинаковым именем, но с разной схемой).

Return to “Работа и Карьера в IT”