

 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/)을 참조하세요.

# USE
<a name="r_USE_command"></a>

쿼리가 실행되는 데이터베이스를 변경합니다. SHOW USE는 최근에 USE 명령과 함께 사용된 데이터베이스를 가리킵니다. RESET USE는 사용된 데이터베이스를 재설정합니다. 즉, SQL에서 데이터베이스를 지정하지 않으면 현재 데이터베이스에서 객체가 검색됩니다.

## 구문
<a name="r_USE-synopsis"></a>

```
USE database
```

## 예제
<a name="r_USE_command-examples"></a>

`dev`, `pdb`, `pdb2`라는 세 개의 데이터베이스가 있다고 가정해 보겠습니다. 각 데이터베이스의 퍼블릭 스키마에 두 개의 테이블 `t`가 있습니다. 먼저 다양한 데이터베이스의 테이블에 데이터를 삽입합니다.

```
dev=# insert into dev.public.t values (1);
INSERT 0 1
dev=# insert into pdb.public.t values (2);
INSERT 0 1
```

데이터베이스를 명시적으로 설정하지 않으면 시스템이 연결된 데이터베이스를 사용합니다. 현재 데이터베이스 컨텍스트를 확인합니다.

```
dev=# show use;
Use Database

(1 row)
dev=> show search_path;
search_path
$user, public
(1 row)
```

데이터베이스를 지정하지 않고 테이블 `t`를 쿼리하면 시스템이 현재 데이터베이스의 테이블을 사용합니다.

```
dev=# select * from t;
c
----
1
(1 row)
```

`use` 명령을 사용하여 연결을 변경하지 않고 데이터베이스를 전환합니다.

```
dev=# use pdb;
USE
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# select * from t;
id
----
2
(1 row)
```

스키마를 명시적으로 지정할 수도 있습니다.

```
dev=# select * from public.t;
id
----
2
(1 row)
```

이제 현재 데이터베이스 내에서 다양한 스키마에 테이블을 생성할 수 있습니다.

```
dev=# create table s1.t(id int);
CREATE TABLE
dev=# insert into pdb.s1.t values (3);
INSERT 0 1
```

검색 경로는 스키마를 지정하지 않을 때 어떤 스키마의 객체에 액세스하는지를 결정합니다.

```
dev=# set search_path to public, s1;
SET
dev=# select * from t;
 id
----
  2
(1 row)
```

다양한 테이블에 액세스하도록 스키마 순서를 변경합니다.

```
dev=# set search_path to s1, public;
SET
dev=# show search_path;
 search_path
-------------
 s1, public
(1 row)
dev=# select * from t;
 id
----
  3
(1 row)
```

원래 연결을 유지하면서 다른 데이터베이스로 전환합니다.

```
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# use pdb2;
USE
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)
```

데이터베이스를 전환하면 검색 경로가 기본값으로 재설정됩니다.

```
dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

테이블을 생성하고 현재 데이터베이스에 데이터를 삽입합니다.

```
dev=# create table pdb2.public.t(id int);
CREATE TABLE
dev=# insert into pdb2.public.t values (4);
INSERT 0 1
dev=# select * from t;
 id
----
  4
(1 row)
```

트랜잭션에서 현재 데이터베이스에 쓰고 3부분 표기법을 사용하여 원하는 데이터베이스에서 읽을 수 있습니다. 여기에는 연결된 데이터베이스도 포함됩니다.

```
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)

dev=# BEGIN;
BEGIN
dev=# select * from t;
 id
----
  4
(1 row)

dev=# insert into t values (5);
INSERT 0 1
dev=# select * from t;
 id
----
  4
  5
(2 rows)

dev=# select * from pdb.public.t;
 id
----
  2
(1 row)

dev=# select * from dev.public.t;
 id
----
  1
(1 row)
```

연결된 데이터베이스로 재설정합니다. 이렇게 하면 이전에 사용한 데이터베이스 `pdb`로 되돌려질 뿐만 아니라 연결된 데이터베이스로 재설정됩니다. 검색 경로도 기본 경로로 변경됩니다.

```
dev=# RESET USE;
RESET
dev=# select * from t;
c
----
1
(1 row)
dev=# show use;
 Use Database
--------------

(1 row)

dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

트랜잭션 시작 시 데이터베이스를 변경할 수 있지만 쿼리를 실행한 후에는 변경할 수 없습니다.

```
dev=# BEGIN;
BEGIN
dev=# use pdb;
USE
dev=# use pdb2;
USE
dev=# use pdb;
USE
dev=# select * from t;
 id
----
  2
(1 row)
dev=# use pdb2;
ERROR:  USEd Database cannot be set or reset inside a transaction after another command.
dev=# rollback;
ROLLBACK
(1 row)
```

### 데이터 카탈로그 예제
<a name="use-redlake-example"></a>

먼저 교차 카탈로그 쿼리를 시연하기 위해 여러 스키마와 카탈로그에 테이블을 생성합니다. 연결된 데이터베이스에서 테이블 만들기로 시작합니다.

```
dev=# CREATE TABLE dev.public.t (col INT);
dev=# INSERT INTO dev.public.t VALUES (1);
dev=# CREATE SCHEMA write_schema;
dev=# CREATE TABLE dev.write_schema.t (state char (2));
dev=# INSERT INTO dev.write_schema.t VALUES ('WA');
```

이제 다른 카탈로그에 유사한 테이블을 생성합니다. 이는 교차 카탈로그 데이터베이스로 작업하는 방법을 보여줍니다.

```
dev=# CREATE TABLE my_db@my_catalog.public.t (col INT);
dev=# INSERT INTO my_db@my_catalog.public.t VALUES (100);
dev=# CREATE SCHEMA my_db@my_catalog.write_schema;
dev=# CREATE TABLE my_db@my_catalog.write_schema.t (state char (2));
dev=# INSERT INTO my_db@my_catalog.write_schema.t VALUES ('CA');
```

현재 데이터베이스 컨텍스트를 확인합니다. 데이터베이스를 명시적으로 설정하지 않으면 시스템이 연결된 데이터베이스를 사용합니다.

```
dev=# SHOW USE;
 Use Database
--------------

(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)

dev=# SELECT * FROM t;
 col
-----
   1
(1 row)
```

다른 카탈로그의 테이블을 쿼리하도록 USEd 데이터베이스를 설정합니다.

```
dev=# USE my_db@my_catalog;

dev=# SHOW USE;
            Use Database
-------------------------------------
 my_db@my_catalog
(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

테이블 t를 쿼리하면 결과가 교차 카탈로그 데이터베이스에서 나옵니다.

```
dev=# SELECT * FROM t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM my_db@my_catalog.public.t;
 col
-----
 100
(1 row)
```

검색 경로를 변경하여 USEd 데이터베이스 내의 다른 스키마에 있는 테이블에 액세스합니다.

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM my_db@my_catalog.write_schema.t;
 state
-------
 CA
(1 row)
```

USE가 교차 카탈로그 데이터베이스로 설정되어 있더라도 원래 데이터베이스를 명시적으로 쿼리할 수 있습니다.

```
dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```

연결된 데이터베이스의 객체를 다시 참조하도록 USEd 데이터베이스를 재설정합니다.

```
dev=# RESET USE;

dev=# SHOW USE;
 Use Database
--------------

(1 row)
```

USE가 재설정되면 search\_path가 재설정된다는 점에 유의하세요.

```
dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

재설정 후 이제 쿼리는 원래 연결된 데이터베이스를 참조합니다.

```
dev=# SELECT * FROM t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM dev.public.t;
 col
-----
   1
(1 row)
```

원래 데이터베이스의 검색 경로를 수정하여 다른 스키마에 액세스할 수 있습니다.

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```