[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-postgresql-chem-otlichayutsya-tipy-serial-i-bigserial-ot-yavnogo-ispolzovaniya-posledovatelnostey":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},932,"chem-otlichayutsya-tipy-serial-i-bigserial-ot-yavnogo-ispolzovaniya-posledovatelnostey",28,"postgresql","PostgreSQL","🐘","Чем отличаются типы serial и bigserial от явного использования последовательностей?","`serial` и `bigserial` — это псевдотипы (не настоящие типы данных), которые являются сокращённой записью для создания столбца с автоинкрементом. За кулисами PostgreSQL создаёт последовательность и привязывает её к столбцу.\n\nЗапись:\n```sql\nCREATE TABLE users (\n    id serial PRIMARY KEY\n);\n```\n\nЭквивалентна:\n```sql\nCREATE SEQUENCE users_id_seq;\nCREATE TABLE users (\n    id integer NOT NULL DEFAULT nextval('users_id_seq')\n);\nALTER SEQUENCE users_id_seq OWNED BY users.id;\n```\n\n### Различия serial, bigserial, smallserial\n\n| Псевдотип | Реальный тип | Размер | Макс. значение |\n|---|---|---|---|\n| `smallserial` | `smallint` | 2 байта | 32 767 |\n| `serial` | `integer` | 4 байта | 2 147 483 647 |\n| `bigserial` | `bigint` | 8 байт | 9 223 372 036 854 775 807 |\n\n### Рекомендация (PostgreSQL 10+)\n\nИспользовать `GENERATED ALWAYS AS IDENTITY` вместо `serial`, потому что:\n- это стандарт SQL\n- запрещает явную вставку значения без `OVERRIDING SYSTEM VALUE`\n- последовательность автоматически привязана к столбцу\n\n```sql\n-- Современный подход\nCREATE TABLE users (\n    id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,\n    email text NOT NULL\n);\n\n-- Если нужно вставить конкретное значение (миграция данных):\nINSERT INTO users (id, email)\nOVERRIDING SYSTEM VALUE\nVALUES (999, 'admin@bank.ru');\n```\n\n> **На собеседовании:** покажите знание эволюции подходов: `serial` -> `GENERATED ALWAYS AS IDENTITY`. Объясните, что `serial` — это PostgreSQL-специфичный псевдотип, а `IDENTITY` — стандарт SQL, который вдобавок защищает от случайной вставки произвольного значения.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Чем отличаются типы serial и bigserial от явного использован — Gymterview","`serial` и `bigserial` — это псевдотипы (не настоящие типы данных), которые являются сокращённой записью для создания столбца с автоинкрементом. За кулисами Pos","`serial` и `bigserial` — это псевдотипы (не настоящие типы данных), которые являются сокращённой записью для создания ст",[7,13],"`serial` и `bigserial` — это псевдотипы (не настоящие типы данных), которые являются сокращённой записью для создания столбца с автоинкрементом. За кулисами PostgreSQL создаёт последовательность и привязывает её к столбцу.",true]