

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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)
```

在交易中，您可以使用三部分記號寫入目前的資料庫，並從任何資料庫讀取。這也包含連線資料庫：

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

### Data Catalog 範例
<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)
```

設定 USE 資料庫來查詢不同目錄中的資料表。

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

變更搜尋路徑以存取 USE 資料庫內不同結構描述中的資料表。

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

重設 USE 資料庫，以再次參考連線資料庫中的物件。

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