개발/DB

[DB]DBeaver에서 데이터베이스 제약 조건 수정 및 데이터 기본값 정의

moonzoo 2024. 1. 17. 17:56

DBeaver에서 데이터베이스 제약 조건 수정

 

 

Action. Dash에서 '추가하기' 버튼을 클릭했을 때, INSERT INTO를 사용해 데이터베이스에 데이터 추가하기

 

Dash에서 데이터를 입력하고 '추가하기 버튼을 클릭했을 때, 아래와 같은 INSERT INTO 쿼리를 실행하도록 했습니다.

INSERT INTO bdb._set (i_id, b_id, i_group, qu, ast, c_type, b_label, u_call, i_desc, yn, as) VALUES (:i_id, :b_id, :i_group, :qu, :ast, :c_type, :b_label, :u_call, :i_desc, :yn, :as)

 

그러나 아래와 같은 에러가 발생했습니다.

IntegrityError: (psycopg2.errors.NotNullViolation) 오류: "u_date" 칼럼(해당 릴레이션 "test_set")의 null 값이 not null 제약조건을 위반했습니다.

이 오류는 데이터베이스 삽입 작업 중에 발생한 것으로, IntegrityError데이터베이스의 무결성 제약 조건이 위반되었음을 나타냅니다. 구체적으로, 오류 메시지 "u_date" 칼럼(해당 릴레이션 "test_set")의 null 값이 not null 제약조건을 위반했습니다u_date 필드가 데이터베이스 테이블 test_set에서 NOT NULL 조건을 갖고 있지만, 삽입하려는 레코드에서 이 필드가 null로 되어 있어 발생한 문제입니다.

 

그래서 해당 테이블을 DBeaver에서 수정을 진행했습니다.

정확한 테이블을 보여드릴 수는 없지만 Not Null로 체크 돼있는 부분을 수정하려면 해당 필드를 더블클릭 합니다.

(사실 귀찮으시다면 현재 페이지에서도 체크박스 클릭 등으로 수정이 가능합니다. 대신 저장은 해주셔야 합니다.)

 

그러면 위와 같이 Not Null에 체크가 돼있을텐데 체크를 푸시고 우측 하단의 Save버튼을 클릭하신 뒤 Persist를 클릭해주시면 됩니다. 

 

이렇게 NOT NULL 제약 조건을 제거해주시면 INSERT INTO 쿼리가 성공적으로 되는 것을 확인하실 수 있습니다.

 

데이터베이스 기본값 정의

데이터베이스 default값을 설정할 때, 사용한 표현들입니다. 

  1. NULL::character varying:
    • NULL: 데이터베이스에서 '값 없음' 또는 '알 수 없는 값'을 나타냅니다. 이는 필드에 아무런 데이터도 저장되지 않았음을 의미합니다.
    • character varying: 가변 길이 문자열 데이터 타입입니다. varchar라고도 불리며, 지정된 최대 길이까지의 문자열을 저장할 수 있습니다.
    • NULL::character varying: 이 표현은 문자열 필드에 NULL 값을 설정함을 의미합니다. 즉, 해당 필드는 문자열 데이터를 저장할 수 있으나 현재는 비어있거나 알려지지 않은 상태입니다.
  2. nextval(' bb.i_set_id_seq '::regclass):
    • nextval: PostgreSQL 데이터베이스에서 사용되는 함수로, 지정된 시퀀스의 다음 값을 반환합니다.
    • 'bb.i_set_id_seq': 특정 시퀀스의 이름입니다. 이 예에서는 bb.i_set_id_seq라는 이름의 시퀀스를 참조합니다.
    • ::regclass: PostgreSQL의 캐스팅 연산자로, 문자열을 데이터베이스 내의 시퀀스나 테이블 등의 등록된 클래스(regclass)로 변환합니다.
    • 이 전체 표현은 bb.i_set_id_seq 시퀀스의 다음 값을 가져오는데 사용됩니다. 이는 보통 기본 키나 고유 식별자를 생성할 때 사용됩니다.
  3. CURRENT_TIMESTAMP:
    • 이는 현재의 날짜와 시간을 반환하는 SQL 함수입니다.
    • 이 값은 쿼리가 실행되는 시점의 날짜와 시간을 나타냅니다.
    • 일반적으로 데이터가 생성되거나 수정된 시점을 기록하는 데 사용됩니다.
  4. 'Y'::bpchar:
    • 'Y': 문자열 리터럴로, 여기서는 문자 'Y'를 나타냅니다.
    • bpchar: 고정 길이 문자열 데이터 타입입니다. PostgreSQL에서는 char 또는 character로도 알려져 있습니다.
    • ::bpchar: 캐스팅 연산자로, 문자열 'Y'를 고정 길이 문자열 데이터 타입으로 변환합니다.
    • 이 표현은 보통 'Y'나 'N'과 같은 플래그 값을 저장할 때 사용되며, 여기서는 'Y' 값을 고정 길이 문자열 타입으로 명시적으로 지정합니다.