или DML операцией. Ответ оказался неочевидным - в PostgreSQL truncate является DML командой, хотя в других субд DDL. Может кто ответить, почему так?
Нипочему, деление всё равно очень условно. Можно считать как DDL, так и DML.
Потому Definition от Modification отличается, транкейт чистит, то есть меняет данные, хоть и за один присест.
я бы сказал, что это DDL, т.к. ему требуется AEL, также как и ALTER TABLE-у. DML берут ниже уровни блокировок.
это странное утверждение, я бы тоже хотел услышать объяснение, почему именно в Postgres-е это DML.
https://t.me/pgsql/472899, можешь ли ты мне помочь ?
почему я? и с чем помочь? я по видосам не работаю
если правда не знаешь тогда ок
Уровни блокировок мне кажется не могут влиять на суть операции. По мне это всюду dml )))))
могут. согласно таблице 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
конеретно cannot be rolled back и говорит о том, что это не DML. я действительно хочу услышать пояснения
PostgreSQL, db2 по-моему поддерживают rollback для нее) я чисто к тому откуда вопрос мог такой взяться
Забавно, нейросеть считает что происходит изменение структуры базы а не данных так данные таблицы перезаписываются и перезаписываются значения счетчиков: Операция TRUNCATE, в отличие от DELETE, является операцией Data Definition Language (DDL), поскольку она изменяет структуру базы данных, а именно, удаляет данные из таблицы, но не удаляет саму таблицу. Операция TRUNCATE действует быстрее, чем DELETE, благодаря тому, что она не сохраняет информацию об удаленных строках и не применяет триггеры, а также не возвращает идентификаторы удаленных строк. TRUNCATE не удаляет безвозвратно таблицу из базы данных, но он изменяет структуру таблицы и освобождает место, занимаемое данными, которые для этого используются. При выполнении операции TRUNCATE все строки таблицы удаляются и таблица сбрасывается в начальное состояние: в ней не остается строк, и первичный ключ счетчика для таблицы сбрасывается на 1. Таким образом, при выполнении операции TRUNCATE меняется структура таблицы, поскольку информация об этой таблице и ее связь со счетчиком перезаписываются.
объяснение идеальное канеш - удаляет данные, а не таблицу, значит DDL. чатгпт-4 вроде получше в логику умеет
Я бы скорее сказал, что он пытается донести что удаляются структуры содержащие данные, а не данные внутри структуры хранения, поэтому операция отнесена к изменению структуры а не данных, но спорить я точно не стану мне показалась эта информация интересной.
А в чем практическая ценность этого знания?
Устроится на работу)
Append например тоже берет эксклюзивную блокировку
Забавно, что вы учитесь у нейросети. В этом тексте первая часть противоречит второй. Продолжайте в том же духе ✌️😊
какой APPEND, что имеется в виду?
INSERT /*+ append */
этого нет в ванильном Postgres-е, а что там в кастомных расширениях, я, увы, не знаю…
этого вообще нет в Pg, это в Оракле, но сути это не меняет
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.
в смысле сути не меняет? - другая база как бы - кастомное расширение функционала через хинты - при всех прочих — ломается конкурентность на таблице в ноль при использовании, что противоречит принципу версионных движков “писатели не блокируют читателей” называть что-либо, требующее AEL локи, DML операцией… это же прямое противоречие определению!
Обсуждают сегодня