

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# 시스템 카탈로그 테이블
<a name="c_intro_catalog_views"></a>

**Topics**
+ [PG\$1ATTRIBUTE\$1INFO](r_PG_ATTRIBUTE_INFO.md)
+ [PG\$1CLASS\$1INFO](r_PG_CLASS_INFO.md)
+ [PG\$1DATABASE\$1INFO](r_PG_DATABASE_INFO.md)
+ [PG\$1DEFAULT\$1ACL](r_PG_DEFAULT_ACL.md)
+ [PG\$1EXTERNAL\$1SCHEMA](r_PG_EXTERNAL_SCHEMA.md)
+ [PG\$1LIBRARY](r_PG_LIBRARY.md)
+ [PG\$1PROC\$1INFO](r_PG_PROC_INFO.md)
+ [PG\$1STATISTIC\$1INDICATOR](r_PG_STATISTIC_INDICATOR.md)
+ [PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md)
+ [PG\$1USER\$1INFO](pg_user_info.md)
+ [카탈로그 테이블 쿼리](c_join_PG.md)

시스템 카탈로그는 테이블과 열에 대한 정보 등 스키마 메타데이터를 저장합니다. 시스템 카탈로그 테이블에는 PG 접두사가 있습니다.

Amazon Redshift 사용자는 표준 PostgreSQL 카탈로그 테이블에 액세스할 수 있습니다. PostgreSQL 시스템 카탈로그에 대한 자세한 내용은 [PostgreSQL 시스템 테이블](https://www.postgresql.org/docs/8.0/static/catalogs.html#CATALOGS-OVERVIEW)을 참조하세요.

# PG\$1ATTRIBUTE\$1INFO
<a name="r_PG_ATTRIBUTE_INFO"></a>

PG\$1ATTRIBUTE\$1INFO는 PostgreSQL 카탈로그 테이블 PG\$1ATTRIBUTE 및 내부 카탈로그 테이블 PG\$1ATTRIBUTE\$1ACL에 빌드된 Amazon Redshift 시스템 뷰입니다. PG\$1ATTRIBUTE\$1INFO에는 열 액세스 제어 목록(있는 경우)을 포함하여 테이블 또는 뷰의 열에 대한 세부 정보가 포함됩니다.

## 테이블 열
<a name="r_PG_ATTRIBUTE_INFO-table-columns"></a>

PG\$1ATTRIBUTE\$1INFO는 PG\$1ATTRIBUTE의 열 외에도 다음 열을 보여줍니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_PG_ATTRIBUTE_INFO.html)

# PG\$1CLASS\$1INFO
<a name="r_PG_CLASS_INFO"></a>

PG\$1CLASS\$1INFO는 PostgreSQL 카탈로그 테이블 PG\$1CLASS 및 PG\$1CLASS\$1EXTENDED를 기반으로 작성된 Amazon Redshift 시스템 뷰입니다. PG\$1CLASS\$1INFO에는 테이블 생성 시간 및 현재 분산 스타일에 대한 세부 정보가 포함되어 있습니다. 자세한 내용은 [쿼리 최적화를 위한 데이터 배포](t_Distributing_data.md) 섹션을 참조하세요.

PG\$1CLASS\$1INFO는 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 [시스템 테이블 및 뷰에 있는 데이터의 가시성](cm_chap_system-tables.md#c_visibility-of-data) 섹션을 참조하세요.

## 테이블 열
<a name="r_PG_CLASS_INFO-table-columns2"></a>

PG\$1CLASS\$1INFO는 PG\$1CLASS의 열 외에도 다음 열을 보여줍니다. PG\$1CLASS의 `oid` 열은 PG\$1CLASS\$1INFO 테이블에서 `reloid`라고 합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_PG_CLASS_INFO.html)

PG\$1CLASS\$1INFO의 RELEFFECTIVEDISTSTYLE 열은 테이블의 현재 분산 스타일을 나타냅니다. 테이블에서 자동 분산을 사용하는 경우 RELEFFECTIVEDISTSTYLE은 10, 11 또는 12입니다. 즉, 효과적인 분산 스타일이 AUTO (ALL), AUTO (EVEN) 또는 AUTO (KEY)임을 나타냅니다. 테이블에서 자동 분산을 사용하는 경우 분산 스타일은 처음에 AUTO (ALL)로 표시된 다음, 열이 분산 키로써 유용하다 판명되면 AUTO (EVEN) 또는 AUTO (KEY)로 변경될 수 있습니다.

다음 표는 RELEFFECTIVEDISTSTYLE 열에서 각 값에 따른 분산 스타일을 나타낸 것입니다.


| RELEFFECTIVEDISTSTYLE | 현재 분산 스타일 | 
| --- | --- | 
| 0 | 0 | 
| 1 | 키 | 
| 8 | ALL | 
| 10 | AUTO(ALL) | 
| 11 | AUTO(EVEN) | 
| 12 | AUTO(KEY) | 

## 예제
<a name="r_PG_CLASS_INFO-example"></a>

다음 쿼리는 카탈로그의 현재 테이블의 분산 스타일을 반환합니다.

```
select reloid as tableid,trim(nspname) as schemaname,trim(relname) as tablename,reldiststyle,releffectivediststyle, 
CASE WHEN "reldiststyle" = 0 THEN 'EVEN'::text 
     WHEN "reldiststyle" = 1 THEN 'KEY'::text 
     WHEN "reldiststyle" = 8 THEN 'ALL'::text 
     WHEN "releffectivediststyle" = 10 THEN 'AUTO(ALL)'::text 
     WHEN "releffectivediststyle" = 11 THEN 'AUTO(EVEN)'::text 
     WHEN "releffectivediststyle" = 12 THEN 'AUTO(KEY)'::text ELSE '<<UNKNOWN>>'::text END as diststyle,relcreationtime 
from pg_class_info a left join pg_namespace b on a.relnamespace=b.oid;
```

```
 tableid | schemaname | tablename | reldiststyle | releffectivediststyle | diststyle  |      relcreationtime       
---------+------------+-----------+--------------+-----------------------+------------+----------------------------
 3638033 | public     | customer  |            0 |                     0 | EVEN       | 2019-06-13 15:02:50.666718
 3638037 | public     | sales     |            1 |                     1 | KEY        | 2019-06-13 15:03:29.595007
 3638035 | public     | lineitem  |            8 |                     8 | ALL        | 2019-06-13 15:03:01.378538
 3638039 | public     | product   |            9 |                    10 | AUTO(ALL)  | 2019-06-13 15:03:42.691611
 3638041 | public     | shipping  |            9 |                    11 | AUTO(EVEN) | 2019-06-13 15:03:53.69192
 3638043 | public     | support   |            9 |                    12 | AUTO(KEY)  | 2019-06-13 15:03:59.120695
(6 rows)
```

# PG\$1DATABASE\$1INFO
<a name="r_PG_DATABASE_INFO"></a>

PG\$1DATABASE\$1INFO는 PostgreSQL 카탈로그 테이블 PG\$1DATABASE를 확장하는 Amazon Redshift 시스템 뷰입니다.

PG\$1DATABASE\$1INFO는 모든 사용자에게 표시됩니다.

## 테이블 열
<a name="r_PG_DATABASE_INFO-table-columns2"></a>

PG\$1DATABASE\$1INFO는 PG\$1DATABASE의 열 외에도 다음 열을 포함합니다. PG\$1DATABASE의 `oid` 열은 PG\$1DATABASE\$1INFO 테이블에서 `datid`라고 합니다. 자세한 내용은 [PostgreSQL 설명서](https://www.postgresql.org/docs/8.0/catalog-pg-database.html)를 참조하세요.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_PG_DATABASE_INFO.html)

# PG\$1DEFAULT\$1ACL
<a name="r_PG_DEFAULT_ACL"></a>

기본 액세스 권한에 대한 정보를 저장합니다. 기본 액세스 권한에 대한 자세한 내용은 [ALTER DEFAULT PRIVILEGES](r_ALTER_DEFAULT_PRIVILEGES.md) 섹션을 참조하세요.

PG\$1DEFAULT\$1ACL은 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 [시스템 테이블 및 뷰에 있는 데이터의 가시성](cm_chap_system-tables.md#c_visibility-of-data) 섹션을 참조하세요.

## 테이블 열
<a name="r_PG_DEFAULT_ACL-table-columns2"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_PG_DEFAULT_ACL.html)

## 예제
<a name="r_PG_DEFAULT_ACL-example"></a>

다음은 데이터베이스에 정의되어 있는 기본 권한을 모두 반환하는 쿼리입니다.

```
select pg_get_userbyid(d.defacluser) as user, 
n.nspname as schema, 
case d.defaclobjtype when 'r' then 'tables' when 'f' then 'functions' end 
as object_type, 
array_to_string(d.defaclacl, ' + ')  as default_privileges 
from pg_catalog.pg_default_acl d 
left join pg_catalog.pg_namespace n on n.oid = d.defaclnamespace;

 user  | schema | object_type |              default_privileges
-------+--------+-------------+-------------------------------------------------------
 admin | tickit | tables      | user1=r/admin + "group group1=a/admin" + user2=w/admin
```

위 예의 결과를 보면 사용자 `admin`이 `tickit` 스키마에서 새롭게 생성한 모든 테이블에 대해 `admin`이 SELECT 권한을 `user1`에게, INSERT 권한을 `group1`에게, 그리고 UPDATE 권한을 `user2`에게 부여하는 것을 알 수 있습니다.

# PG\$1EXTERNAL\$1SCHEMA
<a name="r_PG_EXTERNAL_SCHEMA"></a>

외부 스키마에 대한 정보를 저장합니다.

PG\$1EXTERNAL\$1SCHEMA는 모든 사용자에게 공개됩니다. 수퍼 사용자는 모든 행을 볼 수 있지만 일반 사용자는 액세스 권한을 가지고 있는 메타데이터에 한해 볼 수 있습니다. 자세한 내용은 [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md) 섹션을 참조하세요.

## 테이블 열
<a name="r_PG_EXTERNAL_SCHEMA-table-columns2"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_PG_EXTERNAL_SCHEMA.html)

## 예제
<a name="r_PG_EXTERNAL_SCHEMA-example"></a>

다음은 외부 스키마에 대한 세부 정보를 나타내는 예입니다.

```
select esoid, nspname as schemaname, nspowner, esdbname as external_db, esoptions 
from pg_namespace a,pg_external_schema b where a.oid=b.esoid;

esoid  | schemaname      | nspowner | external_db | esoptions                                                   
-------+-----------------+----------+-------------+-------------------------------------------------------------
100134 | spectrum_schema |      100 | spectrum_db | {"IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
100135 | spectrum        |      100 | spectrumdb  | {"IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
100149 | external        |      100 | external_db | {"IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
```

# PG\$1LIBRARY
<a name="r_PG_LIBRARY"></a>

사용자 정의 라이브러리에 대한 정보를 저장합니다.

PG\$1LIBRARY는 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 [시스템 테이블 및 뷰에 있는 데이터의 가시성](cm_chap_system-tables.md#c_visibility-of-data) 섹션을 참조하세요.

## 테이블 열
<a name="r_PG_LIBRARY-table-columns2"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_PG_LIBRARY.html)

## 예제
<a name="r_PG_LIBRARY-example"></a>

다음은 사용자 정의 라이브러리에 대한 정보를 반환하는 예입니다.

```
select * from pg_library;

name       | language_oid | file_store_id | owner
-----------+--------------+---------------+------
f_urlparse |       108254 |          2000 |   100
```

# PG\$1PROC\$1INFO
<a name="r_PG_PROC_INFO"></a>

PG\$1PROC\$1INFO는 PostgreSQL 카탈로그 테이블 PG\$1PROC 및 내부 카탈로그 테이블 PG\$1PROC\$1EXTENDED에 빌드된 Amazon Redshift 시스템 뷰입니다. PG\$1PROC\$1INFO에는 출력 인수와 관련된 정보를 포함하여(있는 경우) 저장 프로시저 및 함수에 대한 세부 정보가 포함되어 있습니다.

## 테이블 열
<a name="r_PG_PROC_INFO-table-columns"></a>

PG\$1CLASS\$1INFO는 PG\$1PROC의 열 외에도 다음 열을 보여줍니다. PG\$1PROC의 `oid` 열은 PG\$1PROC\$1INFO 테이블에서 `prooid`라고 합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_PG_PROC_INFO.html)

PG\$1PROC\$1INFO의 필드 proargnames에는 OUT 및 INOUT을 포함하여 모든 유형의 인수 이름이 포함되어 있습니다(있는 경우).

# PG\$1STATISTIC\$1INDICATOR
<a name="r_PG_STATISTIC_INDICATOR"></a>

마지막 ANALYZE 이후 삽입 또는 삭제된 행의 수에 대한 정보를 저장합니다. PG\$1STATISTIC\$1INDICATOR 테이블은 DML 연산 이후 업데이트가 빈번하기 때문에 통계 값이 근사치입니다.

PG\$1STATISTIC\$1INDICATOR는 슈퍼 사용자에게만 표시됩니다. 자세한 내용은 [시스템 테이블 및 뷰에 있는 데이터의 가시성](cm_chap_system-tables.md#c_visibility-of-data) 섹션을 참조하세요.

## 테이블 열
<a name="r_PG_STATISTIC_INDICATOR-table-columns"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_PG_STATISTIC_INDICATOR.html)

## 예제
<a name="r_PG_STATISTIC_INDICATOR-example"></a>

다음은 마지막 ANALYZE 이후 테이블의 변경 정보를 반환하는 예입니다.

```
select * from pg_statistic_indicator;

stairelid | stairows | staiins | staidels
----------+----------+---------+---------
   108271 |       11 |       0 |        0
   108275 |      365 |       0 |        0
   108278 |     8798 |       0 |        0
   108280 |    91865 |       0 |   100632
   108267 |    89981 |   49990 |     9999
   108269 |      808 |     606 |      374
   108282 |   152220 |   76110 |   248566
```

# PG\$1TABLE\$1DEF
<a name="r_PG_TABLE_DEF"></a>

테이블 열에 대한 정보를 저장합니다.

PG\$1TABLE\$1DEF는 사용자에게 공개되는 테이블에 대한 정보만 반환합니다. PG\$1TABLE\$1DEF가 예상한 결과를 반환하지 않을 때는 [search\$1path](r_search_path.md) 파라미터가 관련 스키마를 포함하여 올바로 설정되어 있는지 확인하세요.

그 밖에 데이터 분산 스큐, 키 분산 스큐, 테이블 크기, 통계 등 테이블에 대해 더욱 포괄적인 정보를 확인하려면 [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md)를 사용하면 됩니다.

## 테이블 열
<a name="r_PG_TABLE_DEF-table-columns2"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_PG_TABLE_DEF.html)

## 예제
<a name="r_PG_TABLE_DEF-example2"></a>

다음은 LINEORDER\$1COMPOUND 테이블에서 복합 정렬 키 열을 나타내는 예입니다.

```
select "column", type, encoding, distkey, sortkey, "notnull" 
from pg_table_def
where tablename = 'lineorder_compound' 
and sortkey <> 0;

column       | type    | encoding | distkey | sortkey | notnull
-------------+---------+----------+---------+---------+--------
lo_orderkey  | integer | delta32k | false   |       1 | true   
lo_custkey   | integer | none     | false   |       2 | true   
lo_partkey   | integer | none     | true    |       3 | true   
lo_suppkey   | integer | delta32k | false   |       4 | true   
lo_orderdate | integer | delta    | false   |       5 | true   
(5 rows)
```

 다음은 LINEORDER\$1INTERLEAVED 테이블에서 인터리브 정렬 키 열을 나타내는 예입니다.

```
select "column", type, encoding, distkey, sortkey, "notnull" 
from pg_table_def
where tablename = 'lineorder_interleaved' 
and sortkey <> 0;

column       | type    | encoding | distkey | sortkey | notnull
-------------+---------+----------+---------+---------+--------
lo_orderkey  | integer | delta32k | false   |      -1 | true   
lo_custkey   | integer | none     | false   |       2 | true   
lo_partkey   | integer | none     | true    |      -3 | true   
lo_suppkey   | integer | delta32k | false   |       4 | true   
lo_orderdate | integer | delta    | false   |      -5 | true   
(5 rows)
```

PG\$1TABLE\$1DEF는 스키마에서 검색 경로에 포함된 테이블 정보만 반환합니다. 자세한 내용은 [search\$1path](r_search_path.md) 섹션을 참조하세요.

예를 들어 새로운 스키마와 테이블을 생성한 후에 PG\$1TABLE\$1DEF에 대한 쿼리를 실행한다고 가정하겠습니다.

```
create schema demo;
create table demo.demotable (one int);
select * from pg_table_def where tablename = 'demotable';

schemaname|tablename|column| type | encoding | distkey | sortkey | notnull 
----------+---------+------+------+----------+---------+---------+--------
```

다음 쿼리는 새로운 테이블에 대해서 아무런 행도 반환하지 않습니다. 이때는 `search_path` 설정을 검사하세요.

```
show search_path;

  search_path
---------------
 $user, public
(1 row)
```

`demo` 스키마를 검색 경로에 추가한 후 쿼리를 다시 실행합니다.

```
set search_path to '$user', 'public', 'demo';

select * from pg_table_def where tablename = 'demotable';

schemaname| tablename |column|  type   | encoding |distkey|sortkey| notnull
----------+-----------+------+---------+----------+-------+-------+--------
demo      | demotable | one  | integer | none     | f     |     0 | f
(1 row)
```

# PG\$1USER\$1INFO
<a name="pg_user_info"></a>

PG\$1USER\$1INFO는 사용자 ID 및 암호 만료 시간과 같은 사용자 정보를 표시하는 Amazon Redshift 시스템 보기입니다.

수퍼유저만 PG\$1USER\$1INFO를 볼 수 있습니다.

## 테이블 열
<a name="r_PG_DATABASE_INFO-table-columns2"></a>

PG\$1USER\$1INFO에는 다음 열이 포함되어 있습니다. 자세한 내용은 [PostgreSQL 설명서](https://www.postgresql.org/docs/8.0/view-pg-user.html)를 참조하세요.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/pg_user_info.html)

# 카탈로그 테이블 쿼리
<a name="c_join_PG"></a>

**Topics**
+ [카탈로그 쿼리 예제](c_join_PG_examples.md)

일반적으로 카탈로그 테이블과 뷰(이름이 **PG\$1**로 시작하는 릴레이션)는 Amazon Redshift 테이블과 뷰로 조인할 수 있습니다.

카탈로그 테이블은 Amazon Redshift가 지원하지 않는 데이터 형식을 다수 사용합니다. 다음은 쿼리가 카탈로그 테이블을 Amazon Redshift 테이블로 조인할 때 지원되는 데이터 형식입니다.
+ bool
+ "char"
+ "char"
+ "char"
+ "char"
+ "char"
+ 이름
+ oid
+ 텍스트
+ varchar

조인 쿼리를 작성하면서 지원되지 않는 데이터 형식이 포함된 열을 명시적으로, 또는 묵시적으로 참조하는 경우에는 쿼리가 오류를 반환합니다. PG\$1SETTINGS 및 PG\$1LOCKS 테이블에서 사용하는 함수를 제외하고 일부 카탈로그 테이블에서 사용되는 SQL 함수 역시 지원되지 않습니다.

예를 들어 PG\$1STATS 테이블은 Amazon Redshift 테이블과 조인할 때 지원되지 않는 함수로 인해 쿼리를 실행할 수 없습니다.

다음 카탈로그 테이블과 뷰는 Amazon Redshift 테이블의 정보로 조인할 수 있는 유용한 정보를 제공합니다. 단, 일부 테이블은 데이터 형식 및 함수 제한으로 인해 부분적 액세스만 허용됩니다. 부분적 액세스만 허용되는 테이블에 대해 쿼리를 실행할 때는 주의하여 열을 선택하거나 참조하세요.

다음 테이블은 완전 액세스가 가능하여 지원되지 않는 형식이나 함수가 전혀 없습니다.
+  [pg\$1attribute](https://www.postgresql.org/docs/8.0/static/catalog-pg-attribute.html) 
+  [pg\$1cast ](https://www.postgresql.org/docs/8.0/static/catalog-pg-cast.html) 
+  [pg\$1depend](https://www.postgresql.org/docs/8.0/static/catalog-pg-depend.html) 
+  [pg\$1description ](https://www.postgresql.org/docs/8.0/static/catalog-pg-description.html) 
+  [pg\$1locks ](https://www.postgresql.org/docs/8.0/static/view-pg-locks.html) 
+  [pg\$1opclass ](https://www.postgresql.org/docs/8.0/static/catalog-pg-opclass.html) 

다음 테이블은 부분적 액세스가 가능하여 지원되지 않는 형식이나 함수, 또는 잘린 텍스트 열이 포함됩니다. 텍스트 열의 값은 varchar(256) 값까지 잘립니다.
+  [pg\$1class](https://www.postgresql.org/docs/8.0/static/catalog-pg-class.html) 
+  [pg\$1constraint](https://www.postgresql.org/docs/8.0/static/catalog-pg-constraint.html) 
+  [pg\$1database](https://www.postgresql.org/docs/8.0/static/catalog-pg-database.html) 
+  [pg\$1group](https://www.postgresql.org/docs/8.0/static/catalog-pg-group.html) 
+  [pg\$1language ](https://www.postgresql.org/docs/8.0/static/catalog-pg-language.html) 
+  [pg\$1namespace](https://www.postgresql.org/docs/8.0/static/catalog-pg-namespace.html) 
+  [pg\$1operator](https://www.postgresql.org/docs/8.0/static/catalog-pg-operator.html) 
+  [pg\$1proc](https://www.postgresql.org/docs/8.0/static/catalog-pg-proc.html) 
+  [pg\$1settings](https://www.postgresql.org/docs/8.0/static/view-pg-settings.html) 
+  [pg\$1statistic](https://www.postgresql.org/docs/8.0/static/catalog-pg-statistic.html) 
+  [pg\$1tables](https://www.postgresql.org/docs/8.0/static/view-pg-tables.html) 
+  [pg\$1type ](https://www.postgresql.org/docs/8.0/static/catalog-pg-type.html) 
+  [pg\$1user](https://www.postgresql.org/docs/8.0/static/view-pg-user.html) 
+  [pg\$1views](https://www.postgresql.org/docs/8.0/static/view-pg-views.html) 

여기서 언급하지 않는 카탈로그 테이블은 액세스가 안 되거나, 혹은 Amazon Redshift 관리자가 사용하지 못할 가능성이 높습니다. 하지만 쿼리가 Amazon Redshift 테이블 조인과 관련이 없다면 모든 카탈로그 테이블 또는 뷰에 대해 공개적으로 쿼리를 실행할 수 있습니다.

Postgres 카탈로그 테이블에서는 OID 열을 조인 열로 사용할 수 있습니다. 예를 들어 조인 조건 `pg_database.oid = stv_tbl_perm.db_id`에 따라 각 PG\$1DATABASE 행의 내부 데이터베이스 객체 ID는 STV\$1TBL\$1PERM 테이블에 공개되는 DB\$1ID 열과 일치합니다. OID 열은 테이블에서 선택 시 공개되지 않는 내부 기본 키입니다. 카탈로그 뷰에는 OID 열이 없습니다.

일부 Amazon Redshift 함수는 반드시 컴퓨팅 노드에서만 실행해야 합니다. 쿼리에서 사용자가 만든 테이블을 참조하는 경우, SQL은 컴퓨팅 노드에서 실행됩니다.

CATALOG 테이블(PG\$1TABLE\$1DEF처럼 PG 접두사가 첨부된 테이블)만 참조하거나 어떤 테이블도 참조하지 않는 쿼리는 리더 노드에서만 실행됩니다.

컴퓨팅 노드 함수를 사용하는 쿼리에서 사용자 정의 테이블이나 Amazon Redshift 시스템 테이블을 참조하지 않는 경우 다음 오류가 반환됩니다.

```
[Amazon](500310) Invalid operation: One or more of the used functions must be applied on at least one user created table.
```

# 카탈로그 쿼리 예제
<a name="c_join_PG_examples"></a>

아래 쿼리들은 카탈로그 테이블에 대한 쿼리를 실행하여 Amazon Redshift 데이터베이스에 대한 유용한 정보를 가져올 수 있는 몇 가지 방법을 보여줍니다.

## 테이블 ID, 데이터베이스, 스키마 및 테이블 이름 보기
<a name="c_join_PG_examples-view-tableid-db-schema-tablename"></a>

다음은 STV\$1TBL\$1PERM 시스템 테이블과 PG\$1CLASS, PG\$1NAMESPACE 및 PG\$1DATABASE 시스템 카탈로그 테이블을 조인하여 테이블 ID, 데이터베이스 이름, 스키마 이름 및 테이블 이름을 반환하는 뷰 정의입니다.

```
create view tables_vw as
select distinct(stv_tbl_perm.id) table_id
,trim(pg_database.datname)   db_name
,trim(pg_namespace.nspname)   schema_name
,trim(pg_class.relname)   table_name
from stv_tbl_perm
join pg_class on pg_class.oid = stv_tbl_perm.id
join pg_namespace on pg_namespace.oid = pg_class.relnamespace
join pg_database on pg_database.oid = stv_tbl_perm.db_id;
```

다음은 테이블 ID 117855의 정보를 반환하는 예입니다.

```
select * from tables_vw where table_id = 117855;
```

```
table_id | db_name   | schema_name | table_name
---------+-----------+-------------+-----------
  117855 |       dev | public      | customer
```

## Amazon Redshift 테이블당 열의 수 나열
<a name="c_join_PG_examples-list-the-number-of-columns-per-amazon-redshift-table"></a>

다음 쿼리는 일부 카탈로그 테이블을 조인하여 각 Amazon Redshift 테이블에 포함된 열 수를 확인합니다. Amazon Redshift 테이블 이름은 PG\$1TABLES와 STV\$1TBL\$1PERM에 모두 저장됩니다. 가능한 경우 PG\$1TABLES를 사용하여 Amazon Redshift 테이블 이름을 반환합니다.

이번 쿼리에는 Amazon Redshift 테이블이 포함되지 않습니다.

```
select nspname, relname, max(attnum) as num_cols
from pg_attribute a, pg_namespace n, pg_class c
where n.oid = c.relnamespace and  a.attrelid = c.oid
and c.relname not like '%pkey'
and n.nspname not like 'pg%'
and n.nspname not like 'information%'
group by 1, 2
order by 1, 2;

nspname | relname  | num_cols
--------+----------+----------
public  | category |        4
public  | date     |        8
public  | event    |        6
public  | listing  |        8
public  | sales    |       10
public  | users    |       18
public  | venue    |        5
(7 rows)
```



## 데이터베이스의 스키마 및 테이블 나열
<a name="c_join_PG_examples-list-the-schemas-and-tables-in-a-database"></a>

다음은 STV\$1TBL\$1PERM을 일부 PG 테이블에 조인하여 TICKIT 데이터베이스의 테이블 목록과 스키마 이름(NSPNAME 열)을 반환하는 쿼리입니다. 그 밖에 각 테이블의 전체 행 수도 반환합니다. 이 쿼리는 시스템에서 다수의 스키마가 똑같은 테이블 이름을 가지고 있을 때 유용합니다.

```
select datname, nspname, relname, sum(rows) as rows
from pg_class, pg_namespace, pg_database, stv_tbl_perm
where pg_namespace.oid = relnamespace
and pg_class.oid = stv_tbl_perm.id
and pg_database.oid = stv_tbl_perm.db_id
and datname ='tickit'
group by datname, nspname, relname
order by datname, nspname, relname;

datname | nspname | relname  |  rows
--------+---------+----------+--------
tickit  | public  | category |     11
tickit  | public  | date     |    365
tickit  | public  | event    |   8798
tickit  | public  | listing  | 192497
tickit  | public  | sales    | 172456
tickit  | public  | users    |  49990
tickit  | public  | venue    |    202
(7 rows)
```

## 테이블 ID, 데이터 형식, 열 이름 및 테이블 이름 나열
<a name="c_join_PG_examples-list-table-ids-data-types-column-names-and-table-names"></a>

다음은 테이블 ID, 테이블 이름, 열 이름, 각 열의 데이터 형식 등 각 사용자 테이블과 테이블 열에 대한 정보를 나열하는 쿼리입니다.

```
select distinct attrelid, rtrim(name), attname, typname
from pg_attribute a, pg_type t, stv_tbl_perm p
where t.oid=a.atttypid and a.attrelid=p.id
and a.attrelid between 100100 and 110000
and typname not in('oid','xid','tid','cid')
order by a.attrelid asc, typname, attname;

attrelid |  rtrim   |    attname     |  typname
---------+----------+----------------+-----------
  100133 | users    | likebroadway   | bool
  100133 | users    | likeclassical  | bool
  100133 | users    | likeconcerts   | bool
...
  100137 | venue    | venuestate     | bpchar
  100137 | venue    | venueid        | int2
  100137 | venue    | venueseats     | int4
  100137 | venue    | venuecity      | varchar
...
```

## 테이블에 있는 각 열의 데이터 블록 수 계산
<a name="c_join_PG_examples-count-the-number-of-data-blocks-for-each-column-in-a-table"></a>

다음은 STV\$1BLOCKLIST 테이블을 PG\$1CLASS에 조인하여 SALES 테이블의 열에 대한 스토리지 정보를 반환하는 쿼리입니다.

```
select col, count(*)
from stv_blocklist s, pg_class p
where s.tbl=p.oid and relname='sales'
group by col
order by col;

col | count
----+-------
  0 |     4
  1 |     4
  2 |     4
  3 |     4
  4 |     4
  5 |     4
  6 |     4
  7 |     4
  8 |     4
  9 |     8
 10 |     4
 12 |     4
 13 |     8
(13 rows)
```