답변:
이 명령을 시도하십시오 :
ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;
테이블 을 작성한 것과 동일한 DB 사용자로 시도하십시오 .
ALTER TABLE mytable ADD PRIMARY KEY (column);
입니다. Postgresql은 열에 NULL이 없는지 확인합니다.
bigserial
와serial
같은 오류를주고있다 :ERROR: syntax error at or near "BIGSERIAL"
1 단계 : 테이블을 만듭니다.
CREATE TABLE epictable
(
mytable_key serial primary key,
moobars VARCHAR(40) not null,
foobars DATE
);
2 단계, 이와 같이 테이블에 값을 삽입하면 mytable_key가 첫 번째 매개 변수 목록에 지정되어 있지 않으므로 기본 시퀀스가 자동 증가합니다.
insert into epictable(moobars,foobars) values('delicious moobars','2012-05-01')
insert into epictable(moobars,foobars) values('worldwide interblag','2012-05-02')
3 단계 : 표에서 *를 선택하십시오.
el@voyager$ psql -U pgadmin -d kurz_prod -c "select * from epictable"
4 단계 : 출력을 해석하십시오.
mytable_key | moobars | foobars
-------------+-----------------------+------------
1 | delicious moobars | 2012-05-01
2 | world wide interblags | 2012-05-02
(2 rows)
mytable_key 열이 자동으로 증가했는지 확인하십시오.
프로 팁 :
postgresql은 내부적으로 해시 테이블 구조를 사용하여 삽입, 삭제, 업데이트 및 선택 속도를 높이기 때문에 항상 테이블에서 기본 키를 사용해야합니다. 기본 키 열 (고유하고 null이 아닌)을 사용할 수있는 경우 해시 함수에 고유 한 시드를 제공하도록 의존 할 수 있습니다. 기본 키 열을 사용할 수없는 경우 해시 함수는 다른 열 집합을 키로 선택하므로 비효율적입니다.
커스텀 시퀀스를 사용하여 postgresql에서 자동 증분 기본 키를 만듭니다.
1 단계 : 시퀀스 생성
create sequence splog_adfarm_seq
start 1
increment 1
NO MAXVALUE
CACHE 1;
ALTER TABLE fact_stock_data_detail_seq
OWNER TO pgadmin;
2 단계, 테이블 만들기
CREATE TABLE splog_adfarm
(
splog_key INT unique not null,
splog_value VARCHAR(100) not null
);
3 단계, 테이블에 삽입
insert into splog_adfarm values (
nextval('splog_adfarm_seq'),
'Is your family tree a directed acyclic graph?'
);
insert into splog_adfarm values (
nextval('splog_adfarm_seq'),
'Will the smart cookies catch the crumb? Find out now!'
);
4 단계, 행 관찰
el@defiant ~ $ psql -U pgadmin -d kurz_prod -c "select * from splog_adfarm"
splog_key | splog_value
----------+--------------------------------------------------------------------
1 | Is your family tree a directed acyclic graph?
2 | Will the smart cookies catch the crumb? Find out now!
(3 rows)
두 행에는 시퀀스가 정의한대로 1부터 시작하여 1 씩 증가하는 키가 있습니다.
보너스 엘리트 프로 팁 :
프로그래머는 타이핑을 싫어하고 타이핑하는 nextval('splog_adfarm_seq')
것은 성가신 일입니다. DEFAULT
대신 다음과 같이 해당 매개 변수를 입력 할 수 있습니다 .
insert into splog_adfarm values (
DEFAULT,
'Sufficient intelligence to outwit a thimble.'
);
위의 작업을 수행하려면 splog_adfarm 테이블에서 해당 키 열의 기본값을 정의해야합니다. 더 예쁘다.
pgadmin에서이 작업을 수행하려면 훨씬 쉽습니다. postgressql에서 자동 증분을 열에 추가하려면 먼저 자동 증분 시퀀스를 생성하고 필요한 열에 추가해야합니다. 나는 이것을 좋아했다.
1) 먼저 테이블의 기본 키가 있는지 확인해야합니다. 또한 기본 키의 데이터 유형을 bigint 또는 smallint로 유지하십시오. (나는 bigint를 사용했고 다른 곳에서 언급 한 것처럼 serial이라는 데이터 유형을 찾을 수 없었습니다)
2) 그런 다음 sequence-> 새 시퀀스 추가를 마우스 오른쪽 버튼으로 클릭하여 시퀀스를 추가하십시오 . 테이블에 데이터가없는 경우 순서대로 그대로두고 변경하지 마십시오. 그냥 저장하십시오. 기존 데이터가있는 경우 기본 키 열의 마지막 또는 가장 높은 값을 아래 표시된대로 정의 탭의 현재 값에 추가하십시오.
3) 마지막으로 nextval('your_sequence_name'::regclass)
아래 표시된 것처럼 기본 키의 기본값에 줄 을 추가하십시오 .
시퀀스에서 숫자를 사용하려면 다음과 같이 새 시퀀스를 정의하십시오.
CREATE SEQUENCE public.your_sequence
INCREMENT 1
START 1
MINVALUE 1
;
그런 다음 id의 시퀀스를 사용하도록 테이블을 변경하십시오.
ALTER TABLE ONLY table ALTER COLUMN id SET DEFAULT nextval('your_sequence'::regclass);
PostgreSQL에서 기본 키를 성공적으로 자동 증가시키기 위해 다음 스크립트를 시도했습니다.
CREATE SEQUENCE dummy_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
CREATE table dummyTable (
id bigint DEFAULT nextval('dummy_id_seq'::regclass) NOT NULL,
name character varying(50)
);
편집하다:
CREATE table dummyTable (
id SERIAL NOT NULL,
name character varying(50)
)
SERIAL 키워드는 각 열에 대한 시퀀스를 자동으로 만듭니다.
ALTER SEQUENCE dummytable_id_seq RESTART WITH 1;
하고 작동합니다.