USE - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

USE

變更執行查詢的資料庫。SHOW USE 會指向最近與 USE 命令搭配使用的資料庫。RESET USE 會重設已使用的資料庫。這表示如果未在 SQL 中指定資料庫,則會在目前的資料庫中搜尋物件。

語法

USE database

範例

假設有三個資料庫、 devpdbpdb2。讓每個資料庫的公有結構描述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 範例

首先,在不同結構描述和目錄中建立資料表,以示範跨目錄查詢。首先在連線的資料庫中建立資料表。

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)