1개의 기본키를 가지는 테이블 생성하기.

CREATE TABLE COMPANY
(
	ID      INT PRIMARY KEY NOT NULL,
	NAME    TEXT				NOT NULL,
	AGE     INT					NOT NULL,
	ADDRESS CHAR(50),
	SALARY  REAL
);

 

PostgreSQL 데이터 타입 테이블 입니다.

 

데이터 타입 별칭 설명
bigint int8 부호있는 8 바이트 정수
bigserial serial8 자동 증가 8 바이트 정수
bit [ (n) ]   고정 길이 비트 문자열
bit varying [ (n) ] varbit [ (n) ] 가변 길이 비트 열
boolean bool 논리 부울 (true/false)
box   rectangular box on a plane
bytea   이진 데이터 (바이트 배열)
character [ (n) ] char [ (n) ] 고정 길이 문자열
character varying [ (n) ] varchar [ (n) ] 가변 길이 문자열
cidr   IPv4 혹은 IPv6 네트워크 주소
circle   circle on a plane
date   달력 날짜 (년, 월, 일)
double precision float8 배정 밀도 부동 소수점 수 (8 bytes)
inet   IPv4 혹은IPv6 호스트 주소
integer int, int4 부호가 있는 4 바이트 정수
interval [ fields ] [ (p) ]   시간 범위
json   텍스트 JSON 데이터
jsonb   이진 JSON 데이터, decomposed
line   infinite line on a plane
lseg   line segment on a plane
macaddr   MAC 주소
macaddr8   맥 주소 (EUI-64 format)
money   통화량
numeric [ (p, s) ] decimal [ (p, s) ] 선택 가능한 정밀도의 정확한 숫자
path   geometric path on a plane
pg_lsn   PostgreSQL 로그 시퀀스 번호
point   geometric point on a plane
polygon   closed geometric path on a plane
real float4 단 정밀도 부동 소수점 수 (4 바이트)
smallint int2 부호가 있는 2 바이트 정수
smallserial serial2 2 바이트 정수 자동 증가
serial serial4 4 바이트 정수 자동 증가
text   가변 길이 문자열
time [ (p) ] [ without time zone ]   시간대 (시간대 없음)
time [ (p) ] with time zone timetz 시간대를 포함한 시간대
timestamp [ (p) ] [ without time zone ]   날짜 및 시간 (시간대 없음)
timestamp [ (p) ] with time zone timestamptz 날짜 및 시간 (시간대 포함)
tsquery   텍스트 검색 쿼리
tsvector   텍스트 검색 문서
txid_snapshot   사용자 수준 트랜잭션 ID 스냅 샷
uuid   보편적으로 고유한 식별자
xml   XML 데이터

SELECT 문으로 조회한 데이터를 객체에 저장을 한 뒤 그 객체의 내용을 수정을 하려 했는데

 

code 5 Database is lock 이라는 에러가 발생했습니다.

 

각각의 쿼리를 실행했을 때는 문제 없이 조회도 되고 수정도 되었습니다.

 

그런데 꼭 같이 실행할 때는 DB에서 lock 이 걸려 데이터 수정이 안됩니다.

 

왜 그런지 물어보아 알아보니 쿼리 실행 후 종료가 안된 상태에서 다시 다른 쿼리를 실행하려 할 때 Lock이 걸릴 수 있다 하여 코드를 살펴보았습니다.

 

그래서 처음 찾은 해결책은 SELECT 쿼리를 실행 후 객체에 저장한 뒤

 

GC.Close();

GC.WaitForPendingFinalizers();

 

두 구문을 추가해주니 정상적으로 동작하는 것을 확인했습니다.

 

다른 방법이 또 있나 찾아보다가

 

SQLiteDataReader 동작 완료 후 reader.close() 로 SQLiteDataReader을 닫아주니 GC 없이도 제대로 동작되는 것을 확인했습니다.

 

결국 쿼리 실행 후 데이터를 읽고 저장한 후 닫지를 않아 발생한 문제로 확인되었습니다.

 

 

 

+ Recent posts