

 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="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>

3 つのデータベース (`dev` と `pdb` と `pdb2`) があるとします。各データベースのパブリックスキーマに 2 つのテーブル (`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\$1path がリセットされることに注意してください。

```
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)
```