USE - Amazon Redshift

USE

Altera o banco de dados no qual as consultas são executadas. SHOW USE aponta para o banco de dados usado mais recentemente com o comando USE. RESET USE redefine o banco de dados usado. Isso significa que, se o banco de dados não for especificado no SQL, os objetos serão pesquisados no banco de dados atual.

Sintaxe

USE database

Exemplos

Suponha que haja dois bancos de dados, dev e pdb, e pdb2. Considere que haja duas tabelas t nos esquemas públicos de cada um dos bancos de dados. Primeiro, insira os dados em tabelas de diferentes bancos de dados:

dev=# insert into dev.public.t values (1); INSERT 0 1 dev=# insert into pdb.public.t values (2); INSERT 0 1

Se você não definir um banco de dados explicitamente, o sistema usará seu banco de dados conectado. Verifique o contexto atual do banco de dados:

dev=# show use; Use Database (1 row) dev=> show search_path; search_path $user, public (1 row)

Se, ao consultar a tabela t, não for especificado um banco de dados, o sistema usará a tabela em seu banco de dados atual:

dev=# select * from t; c ---- 1 (1 row)

Use o comando use para alternar bancos de dados sem alterar sua conexão:

dev=# use pdb; USE dev=# show use; Use Database -------------- pdb (1 row) dev=# select * from t; id ---- 2 (1 row)

Também é possível especificar explicitamente o esquema.

dev=# select * from public.t; id ---- 2 (1 row)

Agora você pode criar tabelas em esquemas diferentes no banco de dados atual:

dev=# create table s1.t(id int); CREATE TABLE dev=# insert into pdb.s1.t values (3); INSERT 0 1

O caminho de pesquisa determina quais objetos do esquema são acessados quando você não especifica um esquema:

dev=# set search_path to public, s1; SET dev=# select * from t; id ---- 2 (1 row)

Altere a ordem dos esquemas para acessar tabelas diferentes:

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)

Mude para outro banco de dados enquanto mantém sua conexão original:

dev=# show use; Use Database -------------- pdb (1 row) dev=# use pdb2; USE dev=# show use; Use Database -------------- pdb2 (1 row)

Ao alternar bancos de dados, o caminho de pesquisa é redefinido para o padrão:

dev=# show search_path; search_path --------------- $user, public (1 row)

Crie uma tabela e insira dados no banco de dados atual:

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)

Nas transações, você pode gravar no banco de dados atual e ler de qualquer banco de dados usando a notação de três partes. Isso também inclui o banco de dados conectado:

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)

Redefina para seu banco de dados conectado. Observe que isso não só reverte para o banco de dados pdb usado anteriormente, mas redefine para o banco de dados conectado. O caminho de pesquisa também muda para o padrão:

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)

Você pode alterar os bancos de dados no início de uma transação, mas não depois de executar consultas:

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)

ARNs do Catálogo de Dados

Primeiro, crie tabelas em esquemas e catálogos diferentes para demonstrar consultas entre catálogos. Primeiro, crie tabelas no banco de dados conectado.

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');

Depois, crie tabelas semelhantes em um catálogo diferente. Isso demonstra como trabalhar com bancos de dados de consulta entre catálogos.

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');

Verifique o contexto atual do banco de dados. Se você não definir um banco de dados explicitamente, o sistema usará o banco de dados conectado.

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)

Defina o banco de dados USEd para consultar tabelas em um catálogo diferente.

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)

Ao consultar a tabela t, os resultados virão do banco de dados de consulta entre catálogos.

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)

Altere o caminho de pesquisa para acessar tabelas em diferentes esquemas dentro do banco de dados 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)

Embora USE esteja definido como um banco de dados de consulta entre catálogos, ainda é possível consultar explicitamente o banco de dados original.

dev=# SELECT * FROM dev.write_schema.t; state ------- WA (1 row)

Redefina o banco de dados USEd para que consulte novamente os objetos no banco de dados conectado.

dev=# RESET USE; dev=# SHOW USE; Use Database -------------- (1 row)

Observe que o search_path é redefinido quando USE é redefinido.

dev=# SHOW search_path; search_path --------------- $user, public (1 row)

Após a redefinição, as consultas são direcionadas ao banco de dados conectado original.

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)

Você pode modificar o caminho de pesquisa no banco de dados original para acessar esquemas diferentes.

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)