USE
Cambia la base de datos en la que se ejecutan las consultas. SHOW USE apunta a la base de datos que se utilizó más recientemente con el comando USE. RESET USE restablece la base de datos utilizada. Esto significa que si la base de datos no se especifica en SQL, los objetos se buscan en la base de datos actual.
Sintaxis
USE database
Ejemplos
Supongamos que hay tres bases de datos, dev
y pdb
, y pdb2
. Supongamos que hay dos tablas t
en los esquemas públicos de cada una de las bases de datos. En primer lugar, inserte los datos en tablas de diferentes bases de datos:
dev=# insert into dev.public.t values (1); INSERT 0 1 dev=# insert into pdb.public.t values (2); INSERT 0 1
Sin configurar una base de datos de forma explícita, el sistema utiliza la base de datos conectada. Compruebe el contexto actual de la base de datos:
dev=# show use; Use Database (1 row) dev=> show search_path; search_path $user, public (1 row)
Al consultar una tabla t
sin especificar una base de datos, el sistema utiliza la tabla de la base de datos actual:
dev=# select * from t; c ---- 1 (1 row)
Utilice el comando use
para cambiar de bases de datos sin cambiar la conexión:
dev=# use pdb; USE dev=# show use; Use Database -------------- pdb (1 row) dev=# select * from t; id ---- 2 (1 row)
También puede especificar explícitamente el esquema:
dev=# select * from public.t; id ---- 2 (1 row)
Ahora puede crear tablas en diferentes esquemas dentro de la base de datos actual:
dev=# create table s1.t(id int); CREATE TABLE dev=# insert into pdb.s1.t values (3); INSERT 0 1
La ruta de búsqueda determina a qué objetos del esquema se accede cuando no se especifica un esquema:
dev=# set search_path to public, s1; SET dev=# select * from t; id ---- 2 (1 row)
Cambie el orden de los esquemas para acceder a diferentes tablas:
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)
Cambie a otra base de datos manteniendo su conexión original:
dev=# show use; Use Database -------------- pdb (1 row) dev=# use pdb2; USE dev=# show use; Use Database -------------- pdb2 (1 row)
Al cambiar de base de datos, la ruta de búsqueda se restablece a la predeterminada:
dev=# show search_path; search_path --------------- $user, public (1 row)
Cree una tabla e inserte datos en la base de datos actual:
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)
En las transacciones, puede escribir en la base de datos actual y leer desde cualquier base de datos mediante una notación de tres partes. Esto también incluye la base de datos conectada:
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)
Restablezca la base de datos conectada. Tenga en cuenta que esto no solo revierte a la base de datos pdb
utilizada anteriormente, sino que se restablece a la base de datos conectada. La ruta de búsqueda también cambia a la predeterminada:
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)
Puede cambiar las bases de datos al inicio de una transacción, pero no después de ejecutar las 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)
Ejemplo del catálogo de datos
En primer lugar, cree tablas en diferentes esquemas y catálogos para demostrar las consultas entre catálogos. Comience por crear tablas en la base de datos conectada.
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');
Ahora, cree tablas similares en un catálogo diferente. Esto demuestra cómo trabajar con bases de datos 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');
Compruebe el contexto actual de la base de datos. Sin configurar una base de datos de forma explícita, el sistema utiliza la base de datos conectada.
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)
Configure la base de datos USEd para consultar las tablas en un 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)
Al consultar la tabla t, los resultados provienen de la base de datos 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)
Cambie la ruta de búsqueda para acceder a las tablas de distintos esquemas dentro de la base de datos 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)
Aunque USE está configurado como una base de datos entre catálogos, aún es posible realizar consultas explícitas en la base de datos original.
dev=# SELECT * FROM dev.write_schema.t; state ------- WA (1 row)
Restablezca la base de datos USEd para que vuelva a hacer referencia a los objetos de la base de datos conectada.
dev=# RESET USE; dev=# SHOW USE; Use Database -------------- (1 row)
Tenga en cuenta que search_path se restablece cuando se restablece USE.
dev=# SHOW search_path; search_path --------------- $user, public (1 row)
Tras el restablecimiento, las consultas ahora hacen referencia a la base de datos conectada 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)
Puede modificar la ruta de búsqueda en la base de datos original para acceder a diferentes esquemas.
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)