>데이터 베이스 >MySQL 튜토리얼 >내 PostgreSQL 테이블이 특정 스키마에 존재합니까?

내 PostgreSQL 테이블이 특정 스키마에 존재합니까?

DDD
DDD원래의
2025-01-22 15:57:10377검색

Does My PostgreSQL Table Exist in a Specific Schema?

지정된 회사 스키마에 테이블이 존재하는지 확인하는 방법

PostgreSQL 데이터베이스를 사용하다 보면 특정 스키마에 테이블이 존재하는지 확인해야 하는 경우가 종종 있습니다. 이 유효성 검사는 테이블이 공개 스키마와 회사별 스키마 모두에 존재할 수 있는 경우 특히 중요합니다.

문제 정의

질문에 설명된 상황과 유사하게 테이블은 다양한 "회사" 스키마(예: company1, company2, companynn)에 존재할 수 있으며 이러한 특정 스키마에서만 확인해야 하며 다음과 같은 문제가 발생합니다.

  • 'public'과 같은 다른 스키마에 테이블이 존재하더라도 해당 회사 스키마에 테이블이 존재하는지 확인합니다.

해결책: 시스템 디렉터리 및 직접 쿼리

이 문제를 효과적으로 해결하려면 사용자 권한으로 인해 테이블의 존재를 정확하게 반영하지 못할 수 있으므로 정보 스키마에 의존하지 마십시오. 대신 정확한 결과를 얻으려면 시스템 카탈로그 pg_class 및 pg_namespace를 직접 쿼리하세요. 다음 쿼리를 사용할 수 있습니다:

<code class="language-sql">SELECT EXISTS (
   SELECT FROM pg_catalog.pg_class c
   JOIN   pg_catalog.pg_namespace n ON n.oid = c.relnamespace
   WHERE  n.nspname = 'schema_name'
   AND    c.relname = 'table_name'
   AND    c.relkind = 'r'    -- only tables
   );</code>

이 쿼리는 지정된 'schema_name'에 테이블이 있는지 확인하고 다른 스키마를 제외합니다.

대안: regclass로 변환

또 다른 접근 방식은 테이블 이름을 'regclass'로 변환하는 것입니다.

<code class="language-sql">SELECT 'schema_name.table_name'::regclass;</code>

지정된 스키마에 테이블이 없으면 이 메서드는 예외를 발생시킵니다. 이 예외를 처리하면 필요한 유효성 검사가 제공됩니다.

이 개정된 출력은 원래 형식과 이미지를 유지하면서 핵심 의미를 변경하지 않고 문장과 단락을 바꾸어 표현합니다.

위 내용은 내 PostgreSQL 테이블이 특정 스키마에 존재합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.