172 похожих чатов

Ребят, на собесе однажды задали вопрос. Считается ли Truncate DDL

или DML операцией. Ответ оказался неочевидным - в PostgreSQL truncate является DML командой, хотя в других субд DDL. Может кто ответить, почему так?

26 ответов

42 просмотра

Нипочему, деление всё равно очень условно. Можно считать как DDL, так и DML.

Потому Definition от Modification отличается, транкейт чистит, то есть меняет данные, хоть и за один присест.

Ilya Anfimov
Нипочему, деление всё равно очень условно. Можно с...

я бы сказал, что это DDL, т.к. ему требуется AEL, также как и ALTER TABLE-у. DML берут ниже уровни блокировок.

это странное утверждение, я бы тоже хотел услышать объяснение, почему именно в Postgres-е это DML.

Mirasil👨🏽‍💻
https://t.me/pgsql/472899, можешь ли ты мне помочь...

почему я? и с чем помочь? я по видосам не работаю

Виктор Егоров
я бы сказал, что это DDL, т.к. ему требуется AEL, ...

Уровни блокировок мне кажется не могут влиять на суть операции. По мне это всюду dml )))))

Konstantin Zaitsev
Уровни блокировок мне кажется не могут влиять на с...

могут. согласно таблице 13.2 типовые DML операции берут такие локи, которые не блокиурую SELECT-ы https://www.postgresql.org/docs/current/explicit-locking.html#LOCKING-TABLES TRUNCATE же намертво блокирует таблицу на время операции через Access Exclusive (самая тяжелая) я исхожу только из этого факта — TRUNCATE блокирует SELECT-ы, значит это “тяжелее” чем DML. это моё мнение.

Ага(хотя я и против что это DLL))), а вопрос на собесе понятно откуда - cannot be rolled back like a DML operation

Konstantin Zaitsev
Ага(хотя я и против что это DLL))), а вопрос на со...

конеретно cannot be rolled back и говорит о том, что это не DML. я действительно хочу услышать пояснения

Виктор Егоров
конеретно cannot be rolled back и говорит о том, ч...

PostgreSQL, db2 по-моему поддерживают rollback для нее) я чисто к тому откуда вопрос мог такой взяться

V
Потому Definition от Modification отличается, тран...

Забавно, нейросеть считает что происходит изменение структуры базы а не данных так данные таблицы перезаписываются и перезаписываются значения счетчиков: Операция TRUNCATE, в отличие от DELETE, является операцией Data Definition Language (DDL), поскольку она изменяет структуру базы данных, а именно, удаляет данные из таблицы, но не удаляет саму таблицу. Операция TRUNCATE действует быстрее, чем DELETE, благодаря тому, что она не сохраняет информацию об удаленных строках и не применяет триггеры, а также не возвращает идентификаторы удаленных строк. TRUNCATE не удаляет безвозвратно таблицу из базы данных, но он изменяет структуру таблицы и освобождает место, занимаемое данными, которые для этого используются. При выполнении операции TRUNCATE все строки таблицы удаляются и таблица сбрасывается в начальное состояние: в ней не остается строк, и первичный ключ счетчика для таблицы сбрасывается на 1. Таким образом, при выполнении операции TRUNCATE меняется структура таблицы, поскольку информация об этой таблице и ее связь со счетчиком перезаписываются.

Дмитрий Иванов
Забавно, нейросеть считает что происходит изменени...

объяснение идеальное канеш - удаляет данные, а не таблицу, значит DDL. чатгпт-4 вроде получше в логику умеет

Alexander Shelemin
объяснение идеальное канеш - удаляет данные, а не ...

Я бы скорее сказал, что он пытается донести что удаляются структуры содержащие данные, а не данные внутри структуры хранения, поэтому операция отнесена к изменению структуры а не данных, но спорить я точно не стану мне показалась эта информация интересной.

А в чем практическая ценность этого знания?

Append например тоже берет эксклюзивную блокировку

Дмитрий Иванов
Забавно, нейросеть считает что происходит изменени...

Забавно, что вы учитесь у нейросети. В этом тексте первая часть противоречит второй. Продолжайте в том же духе ✌️😊

Nikita Malakhov
INSERT /*+ append */

этого нет в ванильном Postgres-е, а что там в кастомных расширениях, я, увы, не знаю…

Виктор Егоров
этого нет в ванильном Postgres-е, а что там в каст...

этого вообще нет в Pg, это в Оракле, но сути это не меняет

Ilya Anfimov
А что за append?

The APPEND hint tells the optimizer to perform a direct-path insert, which improves the performance of INSERT .. SELECT operations for a number of reasons: Data is appended to the end of the table, rather than attempting to use existing free space within the table. Data is written directly to the data files, by-passing the buffer cache. Referential integrity constraints are not considered. * No trigger processing is performed. * The combination of these features make direct-path inserts significantly quicker than conventional-path inserts.

Nikita Malakhov
этого вообще нет в Pg, это в Оракле, но сути это н...

в смысле сути не меняет? - другая база как бы - кастомное расширение функционала через хинты - при всех прочих — ломается конкурентность на таблице в ноль при использовании, что противоречит принципу версионных движков “писатели не блокируют читателей” называть что-либо, требующее AEL локи, DML операцией… это же прямое противоречие определению!

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта