DB & SQL

PostgreSQL Essential

akasha.park 2025. 4. 22. 10:42

PostgreSQL에서 ANALYZE는 ShareUpdateExclusiveLock이라는 락을 사용합니다.
다른 쿼리(SELECT, INSERT, UPDATE, DELETE)**와 병행해서 실행될 수 있습니다.
ANALYZE VERBOSE 또는 VACUUM ANALYZE를 사용할 경우에도 테이블은 읽기/쓰기와 병행 사용이 가능합니다.
VACUUM FULL은 예외로, AccessExclusiveLock을 걸기 때문에 다른 모든 접근을 막습니다.


PostgreSQL의 INHERITS 테이블 상속 :
부모 테이블인 cities에서 조회할 때 자식 테이블(capitals)의 데이터도 포함할 수 있어요
ONLY 키워드로 부모 테이블 데이터만 조회 가능
SELECT * FROM ONLY cities;
제약조건(예: PRIMARY KEY, UNIQUE, FOREIGN KEY 등)은 상속되지 않습니다.
자식 테이블은 인덱스나 트리거도 상속 안 됨
INHERITS는 쿼리 최적화가 어렵고,  JOIN 등에서 예기치 않게 동작할 수 있어서 큰 규모의 데이터 모델링에는 적합하지 않음

pg_dump : PostgreSQL 데이터베이스를 SQL 파일 또는 바이너리 형식으로 내보내는 툴
백업된 파일은 나중에 psql이나 pg_restore 명령어를 통해 복원할 수 있음
pg_dump [옵션] 데이터베이스이름
-U 접속할 사용자 지정 (-U postgres)
-h 호스트 지정
-p 포트 지정
-F 백업 형식 지정 (p: plain, c: custom, d: directory, t: tar)
-f 백업 파일명 지정
-t 특정 테이블만 백업
-s 스키마만 백업 (데이터는 X)
-a 데이터만 백업 (스키마는 X)
--inserts INSERT 문을 사용한 데이터 덤프 (기본은 COPY 사용)
--no-owner 복원 시 소유자 정보 제외

PostgreSQL은 FROM 절의 서브쿼리에 이름이 없으면 에러를 발생시킵니다

PostgreSQL boolean 타입 : 
가질 수 있는 값 - TRUE ,FALSE, NULL  
허용되는 입력 형태 - 't', 'true', 'yes', '1' , 'f', 'false', 'no', '0'
기본적으로는 t (true), f (false)로 출력됩니다.
Boolean끼리 비교하거나 논리 연산 가능합니다:
WHERE 조건문에서 직접 사용할 수 있습니다.
정수 타입 (INTEGER)과 혼용 불가 (암묵적 변환 없음)
예: WHERE boolean_col = 1 → 에러 발생할 수 있음

 

pg_ctl -m smart
 모든 클라이언트 연결이 끊길 때까지 기다림
새 연결은 허용하지 않음

pg_ctl  -m fast
현재 수행 중인 쿼리는 중단
모든 연결을 강제로 끊음
트랜잭션은 롤백됨

pg_ctl -m immediate  
백엔드 프로세스를 강제로 종료 (SIGQUIT)
데이터 무결성 보장 X → 다음 실행 시 복구 필요할 수 있음


PostgreSQL의 COPY 명령은 테이블과 파일 간에 데이터를 고속으로 입출력할 수 있는 도구
COPY  table_name  TO  '경로/파일명'  WITH (FORMAT text|csv, ...);
COPY  table_name  FROM  '경로/파일명'  WITH (FORMAT text|csv, ...);

pg_restore는 pg_dump로 만든 커스텀 형식, 디렉터리 형식, 또는 tar 형식의 백업 파일을 복원할 때 사용하는 도구
pg_restore [옵션] 백업파일
-U 사용자 지정
-d 대상 데이터베이스
-f 출력 파일 지정
-C 백업 파일 내 CREATE DATABASE도 실행
-c 기존 테이블/오브젝트를 먼저 삭제 (drop)
-v verbose 모드 (자세한 로그 출력)
-t 특정 테이블만 복원
--list 백업 파일 내용만 출력
--schema=스키마명 특정 스키마만 복원