powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Автоинкрементные поля
11 сообщений из 11, страница 1 из 1
Автоинкрементные поля
    #34735247
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос сложный :)

Есть в MS SQL у полей таблиц следующее свойство: IDENTITY (1, 1)
Если при создании таблицы мы указываем для столбца помимо типа данных свойство IDENTITY, то для этой колонки значения будут генерироваться автоматически, в данном конкретном случае - начиная с 1, с инкрементов м единицу. Ввод данных в эти колонки НЕВОЗМОЖЕН!

Т.е. мы создаем таблицу
CREATE TABLE Product_Info (Product_ID smallint IDENTITY(1, 1) NOT NULL, Product_Name char(20) NOT NULL)
И делаем вставку
Insert Product_Info Values("имя");
И после этого Product_ID будет вставлен автоматом, а Product_Name получит значение "имя"

Есть ли аналоги в PostgreSQL?
Единственное что я пока нашел - тип serial
Создаем таблицу:
CREATE TABLE Product_Info (Product_ID SERIAL, Product_Name char(20) NOT NULL)
Вставляем значения:
INSERT INTO Product_Info Values("имя");
И нифига это не сработает, будет попытка вставить "имя" в Product_ID, а задача требует иного подхода.
Работать будет следующее:
INSERT INTO Product_Info Values(default, "имя");

Но моя задача перевести конструкцию вида
INSERT INTO Product_Info SELECT "имя"

Уточняю вопрос: есть ли в постгри автоинкрементные поля, в которые невозможно вручную вводить значения? Системное поле OID не подходит, мне требуется произвольное имя для инкрементного столбца.

Всем спасибо
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34735263
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо
INSERT INTO Product_Info (Product_Name) Values("имя");

либо через RULE разрулите
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34735272
drunk2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZashibisВвод данных в эти колонки НЕВОЗМОЖЕН!
SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON | OFF }
ZashibisУточняю вопрос: есть ли в постгри автоинкрементные поля, в которые невозможно вручную вводить значения?Нет
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34735301
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СОбственно загвоздка у меня организовалась на запросе:
Insert _1SCONST_NEW select OBJID,ID,DATE,VALUE,DOCID,TIME,ACTNO,LINENO_,TVALUE from _1SCONST

а в таблице _1SCONST_NEW первый столбец ROW_ID, как раз таки автоинкрементный, остальные столбцы совпадают. MS SQL все правильно разруливает, вставляет куда надо, а постгри столбец OBJID вставляет в этот самый ROW_ID.
Поскольку я пишу универсальные правила подмены запросов, то задача тут не простая. Можно надеяться, что ребята от 1С всегда сопоставляют столбцы с одинаковыми именами и делать подмену вида:

Insert INTO _1SCONST_NEW (OBJID,ID,DATE,VALUE,DOCID,TIME,ACTNO,LINENO_,TVALUE) select OBJID,ID,DATE,VALUE,DOCID,TIME,ACTNO,LINENO_,TVALUE from _1SCONST

вытаскивая имена из запроса Select, но все равно это как-то коряво :(
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34735317
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to drunk2:

1) В 1С этот флаг утановлен так, что запись невозможна

2) Очень жаль, если это так :)
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34735376
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZashibisВопрос сложный :)

Есть в MS SQL у полей таблиц следующее свойство: IDENTITY (1, 1)
Если при создании таблицы мы указываем для столбца помимо типа данных свойство IDENTITY, то для этой колонки значения будут генерироваться автоматически, в данном конкретном случае - начиная с 1, с инкрементов м единицу. Ввод данных в эти колонки НЕВОЗМОЖЕН!

Ответ зато простой Нет. В PG нет, и судя по всему не предвидится (патч для 8.3 отправлен в отказник ) поля IDENTITY. По одной простой причине - внутренней противоречивости подхода.

ЗЫ А чой-то невозможен? Вполне возможен. Без этого оно бы не жило нормально.
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34735536
drunk2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zashibis1) В 1С этот флаг утановлен так, что запись невозможнаТогда сюда
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34735546
Фотография Zashibis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасиб конечно, но у меня вопрос больше по постгри, чем по 1С :)
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34735556
drunk2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По постгри Вам уже ответили
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34736027
Nick Gazaloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хоть бы кто-нибудь уже написал в FAQ, что эта СУБД называется "Постгрес" или "Постгрескьюэл", а не так, как ее пытаются называть...
...
Рейтинг: 0 / 0
Автоинкрементные поля
    #34737661
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drunk2 ZashibisУточняю вопрос: есть ли в постгри автоинкрементные поля, в которые невозможно вручную вводить значения?Нетнетрудно сделать поле, (повесив триггер, вместо DEFAULT-а) которое будет плевать на попытку ввода в него чего либо, кроме генеримого триггером значения. но вам-то нужно ить не это. вам нужна специфическая способность (какой-то левой субд) опускать поле из полного списка полей таблицы. С одной стороны, ленивый инсерт без перечисления всех полей приемника - уже не комильфо (за редким исключением, когда это, тем не менее, удобно более, чем чревато), а уж ленивый инсерт с использованием фичи конкретного долба... (простите), инструмента - .... (многабукф, все - нецензурные).

но если вам так хочется именно странного - навесьте на табличку руле (т.е. ежели глобально - то слепите полу-автомат, который увешает ваши таблички рулями). и все станет пучком,... с вашей т.з..
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Автоинкрементные поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]