본문 바로가기

데이터베이스/PostgreSQL8

PostgreSQL TRUNCATE TABLE vs DELETE FROM 테이블의 데이터를 정리하는 2가지 방법 TRUNCATE TABLE 해당 테이블 데이터 전체 삭제 일부 데이터만 삭제 불가능 삭제 후 VACUUM 작업 불필요 작업 중 테이블 사용 불가 DELETE FROM 해당 테이블 데이터 삭제 일부 데이터만 삭제 가능 삭제 후 VACUUM 작업 필요 작업 중 테이블 사용 가능 테이블의 모든 데이터를 삭제할 경우 DELETE FROM 과는 다르게 테이블내의 아무것도 계산하지 않고 삭제하므로 테이블의 크기가 클수록 월등히 빠름. 또한 VACUUM FULL ANALYZE 작업이 필요하지 않음.(바로 디스크를 할당해제 함) 단 테이블의 접근이 차단되므로 작업중에 다른 트랜잭션에서 해당 테이블을 사용할 경우 동시성에서 문제가 생기게 됨. 2023. 7. 18.
PostgreSQL 컬럼명으로 Table 찾기 SELECT t.table_schema , t.table_name FROM information_schema.tables t JOIN information_schema.columns c ON c.table_name = t.table_name AND c.table_schema = t.table_schema WHERE c.column_name like '%column_name%' AND t.table_schema not in ('information_schema', 'pg_catalog') AND t.table_type = 'BASE TABLE' ORDER BY t.table_schema %column_name% 부분에 원하는 컬럼명 입력 2023. 7. 18.
PostgreSQL 특정 컬럼에서 LIMIT 1 특정 id로 시퀸스 값을 가지는 테이블 등이 있을 때 특정 레코드를 찾을 때 유용 (이력 관리 테이블 등) SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS r, t.* FROM xxx t ) x WHERE x.r = 1; PARTITION BY section_id ORDER BY name 부분을 테이블에 맞게 수정하여 사용 2023. 7. 18.
PostgreSQL RECURSIVE 사용 (재귀 쿼리) 메뉴 트리 등을 생성할 때 유용 WITH RECURSIVE tree_menu(menu_id, menu_nm, level, menu_path, cycle) AS ( SELECT menu_id , menu_nm , 0 , array[menu_id::TEXT] , false FROM menu WHERE parent_menu_id IS NULL UNION ALL SELECT A.menu_id , A.menu_nm , level + 1 , menu_path || A.menu_id::TEXT , A.menu_id = any(menu_path) FROM menu A, tree_menu B WHERE A.parent_menu_id = B.menu_id AND NOT cycle ) SELECT menu_id , menu.. 2023. 7. 18.
반응형