Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Автоинкрементные поля / 11 сообщений из 11, страница 1 из 1
17.08.2007, 16:12
    #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
17.08.2007, 16:16
    #34735263
Thamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоинкрементные поля
Либо
INSERT INTO Product_Info (Product_Name) Values("имя");

либо через RULE разрулите
...
Рейтинг: 0 / 0
17.08.2007, 16:19
    #34735272
drunk2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоинкрементные поля
ZashibisВвод данных в эти колонки НЕВОЗМОЖЕН!
SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON | OFF }
ZashibisУточняю вопрос: есть ли в постгри автоинкрементные поля, в которые невозможно вручную вводить значения?Нет
...
Рейтинг: 0 / 0
17.08.2007, 16:25
    #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
17.08.2007, 16:26
    #34735317
Zashibis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоинкрементные поля
to drunk2:

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

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

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

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

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

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


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