USE - Amazon Redshift

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)

트랜잭션에서 현재 데이터베이스에 쓰고 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)