使用 - Amazon Redshift

使用

クエリを実行するデータベースを変更します。SHOW USE は、USE コマンドで最近使用されたデータベースを指します。RESET USE は、使用済みデータベースをリセットします。つまり、データベースを SQL で指定しない場合、オブジェクトは現在のデータベースで検索されます。

構文

USE database

3 つのデータベース (devpdbpdb2) があるとします。各データベースのパブリックスキーマに 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)