使用
クエリを実行するデータベースを変更します。SHOW USE は、USE コマンドで最近使用されたデータベースを指します。RESET USE は、使用済みデータベースをリセットします。つまり、データベースを SQL で指定しない場合、オブジェクトは現在のデータベースで検索されます。
構文
USE database
例
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)
データカタログの例
まず、異なるスキーマとカタログにテーブルを作成して、クロスカタログクエリを示します。まず、接続されたデータベースにテーブルを作成します。
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)