PostgreSQL 익스텐션 함수
PostgreSQL 익스텐션 함수 (PostgreSQL Extension Functions)
PostgreSQL 익스텐션이 제공하는 함수들을 정리한 목록이에요. 원격 Postgres 인스턴스에 연결하거나 쿼리하고, 바이너리 덤프를 읽는 등의 작업을 SQL에서 바로 할 수 있어요.
출처: 문서
본문
- pg_clear_cache
- postgres_attach
- postgres_configure_pool
- postgres_execute
- postgres_hstore_get
- postgres_hstore_to_json
- postgres_query
- postgres_scan
- postgres_scan_pushdown
- read_postgres_binary
pg_clear_cache
pg_clear_cache() -> TABLE
연결된 모든 PostgreSQL 카탈로그에 대해 캐시된 스키마 항목(컬럼 목록이 있는 테이블 이름 등)을 지워요. 연결된 스키마는 다음 접근 시 다시 읽혀요.
파라미터 (Parameters)
없음.
반환 (Returns)
다음 컬럼의 테이블:
Success(BOOLEAN): 캐시 지우기가 성공했는지 여부
현재 테이블 결과는 항상 0행으로 반환되므로 플래그 값은 확인할 수 없어요.
예시 (Example)
CALL pg_clear_cache()
postgres_attach
경고 (Warning) 이 함수는 더 이상 사용되지 않으며(deprecated) 향후 버전에서 제거될 예정이에요. 대신
ATTACH문을 사용하세요.
postgres_attach(connection_string VARCHAR [, ⟨optional named parameters⟩]) -> TABLE
postgres_configure_pool
FROM postgres_configure_pool([⟨optional named parameters⟩]) -> TABLE
PostgreSQL 데이터베이스가 연결되면 이 데이터베이스에 대한 연결 풀(connection pool)이 만들어져요. 이 함수는 지정된 연결된 데이터베이스의 연결 풀 구성 옵션을 변경할 수 있게 해줘요. 또한 연결 풀의 현재 유효 구성 옵션과 수집된 런타임 통계를 나열할 수도 있어요.
파라미터 (Parameters)
catalog_name(VARCHAR): 구성 변경이 적용되고 세부 정보가 반환되는 연결된 Postgres 데이터베이스의 이름(별칭).NULL(기본)이면 구성은 변경하지 않고 모든 연결된 카탈로그의 풀 현재 상태를 반환해요. 다른 옵션이 지정될 때는 지정되고 non-NULL이어야 해요.acquire_mode(VARCHAR, 기본:'force'): 풀에서 연결을 얻는 방법:'force'(항상 연결, 풀 제한 무시),'wait'(사용 가능할 때까지 차단),'try'(사용 불가하면 즉시 실패)max_connections(UBIGINT): 각 연결된 Postgres 데이터베이스에 대해 연결 풀에 캐시할 수 있는 최대 연결 수. 병렬 스캔을 사용할 때는 이 수를 일시적으로 초과할 수 있어요.wait_timeout_millis(UBIGINT): 사용 가능한 연결이 모두 사용 중인 풀에서 연결을 얻을 때 기다리는 최대 밀리초 수.enable_thread_local_cache(BOOLEAN): 스레드 로컬 캐시에서 연결 캐싱을 활성화할지 여부. 이러한 연결은 스레드에 고정되고 다른 스레드에 제공되지 않지만 풀에서 자리는 차지해요.max_lifetime_millis(UBIGINT): 연결을 열어 둘 수 있는 최대 밀리초 수. 이 값은 연결을 풀에서 가져오고 풀로 돌려보낼 때 확인돼요. 연결 풀 리퍼(reaper) 스레드가 활성화되면('enable_reaper_thread' 인자), 이 값은 백그라운드에서 주기적으로 확인돼요.idle_timeout_millis(UBIGINT): 연결을 풀에서 유휴 상태로 유지할 수 있는 최대 밀리초 수. 이 값은 연결을 풀에서 가져올 때 확인돼요. 연결 풀 리퍼 스레드가 활성화되면('enable_reaper_thread' 옵션), 이 값은 백그라운드에서 주기적으로 확인돼요.enable_reaper_thread(BOOLEAN): 연결 풀 리퍼 스레드를 활성화할지 여부. 이 스레드는 주기적으로 풀을 스캔해'max_lifetime_millis'와'idle_timeout_millis'를 확인하고 지정된 값을 초과하는 연결을 닫아요. 이 옵션이 효과를 내려면'max_lifetime_millis'또는'idle_timeout_millis'중 하나가 0이 아닌 값으로 설정되어야 해요.health_check_query(VARCHAR): 연결이 정상인지 확인하는 데 사용되는 쿼리. 이 옵션을 빈 문자열로 설정하면 헬스 체크가 비활성화돼요.
반환 (Returns)
다음 컬럼의 테이블:
catalog_name(VARCHAR): 연결된 Postgres 데이터베이스의 이름(별칭)acquire_mode(VARCHAR): 풀에서 연결을 얻는 방법:'force'(항상 연결, 풀 제한 무시),'wait'(사용 가능할 때까지 차단),'try'(사용 불가하면 즉시 실패)available_connections(UBIGINT): 현재 풀에서 사용 가능한 유휴 연결 수max_connections(UBIGINT): 풀에 캐시할 수 있는 최대 연결 수.wait_timeout_millis(UBIGINT): 사용 가능한 연결이 모두 사용 중인 풀에서 연결을 얻을 때 기다리는 최대 밀리초 수;wait획득 모드에만 적용cache_hits(UBIGINT): 캐시된 연결이 풀에서 성공적으로 반환된 횟수cache_misses(UBIGINT): 풀이 새 연결을 만든 횟수try_failures(UBIGINT): 풀이try획득 모드에서 연결을 요청했고 그 시점에 사용 가능한 연결이 없어서 풀이 연결을 제공하지 못한 횟수; Postgres 익스텐션이 병렬 스캔을 수행할 때 워커 스레드는 항상try획득 모드를 사용한다는 점을 참고 —SET threads = ⟨number_higher_then_pool_size⟩{:.language-sql .highlight}를 사용하면 일부 워커 스레드는 연결을 얻지 못해 에러를 던지지 않고 작업 없이 반환해요thread_local_cache_enabled(BOOLEAN): 스레드 로컬 캐시에서 연결 캐싱을 활성화했는지 여부; 스레드 로컬 연결은 리퍼 스레드가 아니 지워요thread_local_cache_hits(UBIGINT): 메인 풀로 가지 않고 스레드 로컬 캐시에서 연결을 성공적으로 얻은 횟수thread_local_cache_misses(UBIGINT): 스레드 로컬 캐시에서 사용할 수 없어 대신 메인 풀에서 연결을 가져온 횟수max_lifetime_millis(UBIGINT): 연결을 열어 둘 수 있는 최대 밀리초 수idle_timeout_millis(UBIGINT): 연결을 풀에서 유휴 상태로 유지할 수 있는 최대 밀리초 수reaper_thread_running(BOOLEAN): 풀 리퍼 스레드가 실행 중인지 여부; 이 스레드는 주기적으로 풀을 스캔해'max_lifetime_millis'와'idle_timeout_millis'를 확인하고 지정된 값을 초과하는 연결을 닫아요reaper_thread_period_millis(UBIGINT): 리퍼 스레드가 검사를 수행하는 기간health_check_query(VARCHAR): 연결이 정상인지 확인하는 데 사용되는 쿼리
예시 (Examples)
모든 연결 풀(모든 연결된 데이터베이스)의 현재 유효 구성 옵션과 수집된 런타임 통계 나열:
FROM postgres_configure_pool()
지정된 연결된 데이터베이스의 연결 풀에 대한 하나 이상의 구성 옵션 변경:
FROM postgres_configure_pool(catalog_name = 'db1', acquire_mode = 'wait', max_connections = 42)
postgres_execute
postgres_execute(attached_db_name VARCHAR, sql_query VARCHAR[, ⟨optional named parameters⟩]) -> TABLE
이전에 ATTACH ... AS ⟨attached_db_name⟩{:.language-sql .highlight}으로 연결한 지정된 원격 Postgres 인스턴스에서 ⟨sql_query⟩{:.language-sql .highlight}을 실행해요. 이 함수는 빈 결과를 반환해요.
파라미터 (Parameters)
attached_db_name(VARCHAR): 연결된 PostgreSQL 데이터베이스의 이름sql_query(VARCHAR): 실행을 위해 PostgreSQL로 전달되는 쿼리; DuckDB는 이 쿼리에 대해 변환이나 분석을 수행하지 않아요
선택적 명명된 파라미터:
use_transaction(BOOLEAN, 기본:TRUE): 이전에 트랜잭션이 시작되지 않았다면 PostgreSQL 트랜잭션을 시작할지 여부.
반환 (Returns)
다음 컬럼의 테이블:
Success(BOOLEAN): 캐시 지우기가 성공했는지 여부
현재 테이블 결과는 항상 0행으로 반환되므로 플래그 값은 확인할 수 없어요.
예시 (Example)
CALL postgres_execute('db1', 'VACUUM ANALYZE', use_transaction = false)
postgres_hstore_get
postgres_hstore_get(hstore_string VARCHAR, hstore_key VARCHAR) -> VARCHAR
PostgreSQL hstore 컬럼의 외부 표현을 파싱하고 지정된 hstore 키의 값을 반환해요.
파라미터 (Parameters)
hstore_string(VARCHAR):key => value형태의 PostgreSQLhstore값.hstore_key(VARCHAR): 값을 반환할 키 이름.
반환 (Returns)
지정된 키의 값. 키가 없으면 NULL.
예시 (Example)
SELECT postgres_hstore_get('a=>b, c=>d', 'a')
postgres_hstore_to_json
postgres_hstore_to_json(hstore_string VARCHAR) -> JSON
PostgreSQL hstore 컬럼의 외부 표현을 JSON으로 변환해요.
파라미터 (Parameters)
hstore_string(VARCHAR):key => value형태의 PostgreSQLhstore값.
반환 (Returns)
입력 hstore 문자열과 같은 키/값 쌍을 가진 JSON 딕셔너리. 모든 값은 문자열로 반환돼요.
예시 (Example)
SELECT postgres_hstore_to_json('z=>1, a=>2, m=>3')
postgres_query
postgres_query(attached_db_name VARCHAR, sql_query VARCHAR[, ⟨optional named parameters⟩]) -> TABLE
이전에 ATTACH .. AS ⟨attached_db_name⟩{:.language-sql .highlight}으로 연결한 지정된 원격 DB에서 쿼리를 실행하고 쿼리 결과를 테이블로 반환해요.
파라미터 (Parameters)
attached_db_name(VARCHAR): 연결된 PostgreSQL 데이터베이스의 이름sql_query(VARCHAR): 실행을 위해 PostgreSQL로 전달되는 쿼리; DuckDB는 이 쿼리에 대해 변환이나 분석을 수행하지 않아요
선택적 명명된 파라미터:
use_transaction(BOOLEAN, 기본:TRUE): 이전에 트랜잭션이 시작되지 않았다면 PostgreSQL 트랜잭션을 시작할지 여부.params(STRUCT): PostgreSQL 서버로 전달되는 쿼리 파라미터; 텍스트 프로토콜을 사용할 때만 지원
반환 (Returns)
쿼리 결과가 담긴 테이블.
예시 (Example)
FROM postgres_query('db11', 'SELECT $1::INTEGER, $2::TEXT', params=row(42::INTEGER, 'foo'::VARCHAR))
postgres_scan
경고 (Warning) 이 함수는 더 이상 사용되지 않으며 향후 버전에서 제거될 예정이에요. 대신 연결된 PostgreSQL 데이터베이스에 대한 직접 SQL 쿼리를 사용하세요.
postgres_scan(connection_string VARCHAR, schema_name VARCHAR, table_name VARCHAR) -> TABLE
postgres_scan_pushdown
경고 (Warning) 이 함수는 더 이상 사용되지 않으며 향후 버전에서 제거될 예정이에요. 대신 연결된 PostgreSQL 데이터베이스에 대한 직접 SQL 쿼리를 사용하세요.
postgres_scan_pushdown(connection_string VARCHAR, schema_name VARCHAR, table_name VARCHAR) -> TABLE
read_postgres_binary
FROM read_postgres_binary(file_path VARCHAR[, ⟨optional named parameters⟩]) -> TABLE
파일 시스템에서 PostgreSQL 바이너리 덤프 파일을 읽어요.
파라미터 (Parameters)
file_path(VARCHAR): PostgreSQL 형식의 바이너리 덤프 파일의 FS 경로.
선택적 명명된 파라미터:
columns(STRUCT):column_name -> column_type구조 형태의 타입 매핑.buffer_size(UBIGINT, 기본: 32KB): 읽기 버퍼 크기(바이트).
반환 (Returns)
바이너리 덤프 파일의 내용을 테이블로.
예시 (Example)
COPY (SELECT 42::INTEGER AS a, 'foo'::VARCHAR AS b) TO 'path/to/test.bin' (FORMAT postgres_binary);
FROM read_postgres_binary('path/to/test.bin', columns = {a: 'INTEGER', b: 'VARCHAR'});
더 알아보기 (Learn more)
- PostgreSQL 익스텐션 — 연결과 스캔 전반.
- PostgreSQL hstore — hstore 타입 문서.