복붙노트

[SQL] 어떻게 설정 자동으로 PostgreSQL의에서 기본 키를 증가?

SQL

어떻게 설정 자동으로 PostgreSQL의에서 기본 키를 증가?

나는 22 열 PostgreSQL을의 테이블을 가지고 있고, 나는 자동 증가 기본 키를 추가 할.

나는 형 BIGSERIAL의 ID라는 열을 만들려고하지만 pgadmin 오류로 응답 :

ERROR: sequence must have same owner as table it is linked to.

누구든지이 문제를 해결하는 방법을 알고 있나요? 어떻게 다시 테이블을 다시하지 않고는 PostgreSQL의에서 자동 증가 기본 키를 만들 추가합니까?

해결법

  1. ==============================

    1.이 명령을보십시오 :

    이 명령을보십시오 :

    ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;
    

    테이블을 생성 한 것과 동일한 DB 사용자와보십시오.

  2. ==============================

    2.1 단계, 테이블을 만들 :

    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 단계, 테이블 SELECT * FROM :

    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이 아닌 강제) 기본 키 열을 사용할 경우, 해쉬 함수에 대해 고유 한 씨앗을 제공하기에 의존 할 수있다. 열의 기본 키가없는 경우는 키로 열의 다른 세트를 선택으로서, 해시 함수가 비효율이된다.

  3. ==============================

    3.자동차, PostgreSQL의에서 기본 키를 증가 사용자 정의 순서를 사용하여 만들기 :

    자동차, 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)
    

    2 열의 1에서 시작 시퀀스에 의해 정의 된 바와 같이 1 씩 증가 키를 갖는다.

    보너스 엘리트 프로토 타입 :

    프로그래머는 입력을 싫어하고의 nextval ( 'splog_adfarm_seq')을 밖으로 입력하는 것은 성가신입니다. 이처럼, 해당 매개 변수에 DEFAULT를 입력 할 수 있습니다 :

    insert into splog_adfarm values (
        DEFAULT, 
        'Sufficient intelligence to outwit a thimble.'
    );
    

    일에 위의 경우 splog_adfarm 테이블에 해당 키 열에 대한 디폴트 값을 정의해야합니다. 어떤 예뻐이다.

  4. ==============================

    4.당신이 pgadmin에서이 작업을 수행하려면, 그것은 훨씬 더 쉽습니다. 열에 자동 증가 시퀀스를 생성하고 필요한 컬럼에 추가하기 위해, 먼저 필요 자동 증가를 추가, 포스트그레스 SQL에 보인다. 나는이 좋아했다.

    당신이 pgadmin에서이 작업을 수행하려면, 그것은 훨씬 더 쉽습니다. 열에 자동 증가 시퀀스를 생성하고 필요한 컬럼에 추가하기 위해, 먼저 필요 자동 증가를 추가, 포스트그레스 SQL에 보인다. 나는이 좋아했다.

    1) 첫째로 당신은 확실히 당신의 테이블에 대한 기본 키가 확인해야합니다. 또한 BIGINT 또는 SMALLINT의 기본 키의 데이터 유형을 유지. (다른 답변에서 언급 한 바와 같이 다른 곳 일련라는 데이터 유형을 찾을 수 없습니다, BIGINT를 사용)

    2) 그런 다음 새로운 순서를 추가> 시퀀스 - 마우스 오른쪽 버튼으로 클릭 시퀀스를 추가 할 수 있습니다.  테이블에 데이터가 없으면 그대로, 변경하지, 순서를 둡니다. 그냥 저장합니다. 데이터가 존재하는 경우 다음과 같이 정의 탭에서 현재 값으로 기본 키 열에서 마지막 또는 가장 높은 값을 추가합니다.

    3) 마지막으로, NEXTVAL 라인 ( 'your_sequence_name':: regclass 형) 기본 키에서 기본 값으로 아래와 같이 추가합니다.

    확인 시퀀스 이름은 여기에 올바른 것입니다. 이 모든 및 자동 증가 작동합니다.

  5. ==============================

    5.당신이 순서대로 번호를 사용하려면, 같은 뭔가 새로운 순서를 정의

    당신이 순서대로 번호를 사용하려면, 같은 뭔가 새로운 순서를 정의

    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);
    
  6. ==============================

    6.나는 성공적으로 자동 증가에 PostgreSQL의 기본 키를 다음 스크립트를 시도했다.

    나는 성공적으로 자동 증가에 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 키워드가 자동으로 각각의 컬럼의 순서를 만들 수 있습니다.

  7. ==============================

    7.어쩌면이 질문에 대답 할 말을 조금,하지만 난 내 일에이 주제에 일하고 있어요 :)

    어쩌면이 질문에 대답 할 말을 조금,하지만 난 내 일에이 주제에 일하고 있어요 :)

    나는 쓰기 칼럼 'a_code'= C1, C2, C3, C4에 원 ...

    첫째로 나는 이름 REF_ID 및 유형 직렬로 열을 열었다. 그런 다음이 명령을 내 문제를 해결 :

    update myschema.mytable set a_code=cast('c'||"ref_id" as text) 
    
  8. from https://stackoverflow.com/questions/7718585/how-to-set-auto-increment-primary-key-in-postgresql by cc-by-sa and MIT license