Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: mhydra в Jan 16, 2006, 14:21



Титла: Как да направя Auto increment в PostgreSQL
Публикувано от: mhydra в Jan 16, 2006, 14:21
Предварително се извянявам за глупавият въпрос който задавам обаче обиколих всички ръководства които успях да намеря и никъде не успях да намеря решение на проблема си.

Въпросът ми е следният:
Имам база данни на PostgreSQL и създавам таблица примерно тази :
asd (asdID, asd_name)

И я създавам така :
create table asd (asdID int primary key, asd_name varchar (10));

Сега по какъв начин да направя primary key  да е auto increment, тоест самичък да си увеличава стойностите.

В MySQL си имам опция AUTO_INCREMENT обаче тук как да стане?

Претърсих във всички ръководства за PostgreSQL обаче не можах да намеря решение.

В смисъл такъв че не искам всеки път да пиша
insert into asd ('nomer', 'neshto si' );

А искам текушият номер на първичния ключ сам да се увеличава.

Надявам се че разбрахте каква ми е целта.


Титла: Как да направя Auto increment в PostgreSQL
Публикувано от: в Jan 16, 2006, 14:50
ами в документацията си го пише :-)

http://www.postgresql.org/docs....-SERIAL

нещото, което се използва се казва sequence, и от няколко версии насам са направили лесно свързване на конкретна колона със sequence, чрез псевдо типа SERIAL

може да огледаш документацията и какво всъщност е sequence


Титла: Как да направя Auto increment в PostgreSQL
Публикувано от: в Jan 16, 2006, 14:50
Не знам каква документация си чел, но това си го има отдавна в PostgreSQL, а ако не се лъжа, от версия 7.4 вече и автоматизирано, като са добавени два типа данни:

serial и bigserial, съответно за int4 и int8.

След обявяване на колона от този тип (само една в таблица) автоматично се създава sequence и се дефинира увеличаването му, когато insert-ваш данни в таблицата:

"...

CREATE TABLE tablename (
    colname SERIAL
);

is equivalent to specifying:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer DEFAULT nextval('tablename_colname_seq';) NOT NULL
);

..."


Титла: Как да направя Auto increment в PostgreSQL
Публикувано от: mhydra в Jan 16, 2006, 16:56
Добре, пробвах го това нещо обаче нещо си гурно не го правя както трябва.
Когато insert-вам пак ми иска да му подам стойност за това поле което съм го дефинирал като SERIAL.

Ползвах изложеният по-горе пример.
Къде бъркам?

ЕДИТ:
Пробвах и следният пример:

CREATE TABLE distributors (
did DECIMAL(3) PRIMARY KEY DEFAULT NEXTVAL(’serial’),
name VARCHAR(40))
);

Същото нещо го правих и със did с SERIAL.
Прочетох много внимателно документацията, за SERIAL има точно този пример и още 1 страница.

Не мога да разбера къде бъркам.


Титла: Как да направя Auto increment в PostgreSQL
Публикувано от: Hapkoc в Jan 16, 2006, 17:41
Ако прочетеш внимателно какво е написал free_did, ще забележиш, че има два вариянта:

1. задаваш като тип на полето SERIAL
Цитат
CREATE TABLE tablename (
   colname SERIAL
);


2. създаваш ръчно sequence и закачаш колоната към него чрез default value

Цитат
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
   colname integer DEFAULT nextval('tablename_colname_seq';) NOT NULL
);


Ти си направил някакъв хибрид м/у двете...


Титла: Как да направя Auto increment в PostgreSQL
Публикувано от: mhydra в Jan 18, 2006, 08:38
Благодаря на всички взели участие и помогнали ми с отговор хора.
Оправих проблема.