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)