本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
USE
變更執行查詢的資料庫。SHOW USE 會指向最近與 USE 命令搭配使用的資料庫。RESET USE 會重設已使用的資料庫。這表示如果未在 SQL 中指定資料庫,則會在目前的資料庫中搜尋物件。
語法
USE database
範例
假設有三個資料庫、 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 範例
首先,在不同結構描述和目錄中建立資料表,以示範跨目錄查詢。首先在連線的資料庫中建立資料表。
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)