USE - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuovi Python a UDFs partire dal 1° novembre 2025. Se vuoi usare Python UDFs, crea la UDFs data precedente a quella data. Python esistente UDFs continuerà a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

USE

Modifica il database su cui vengono eseguite le query. SHOW USE punta al database che è stato utilizzato più di recente con il comando USE. RESET USE ripristina il database utilizzato. Ciò significa che se il database non è specificato nell'SQL, gli oggetti vengono cercati nel database corrente.

Sintassi

USE database

Esempi

Supponiamo che esistano tre database dev epdb, epdb2. Lascia che ci siano due tabelle t negli schemi pubblici di ciascuno dei database. Innanzitutto, inserisci i dati nelle tabelle di diversi database:

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

Senza impostare esplicitamente un database, il sistema utilizza il database connesso. Controlla il contesto attuale del database:

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

Quando si esegue una query su una tabella t senza specificare un database, il sistema utilizza la tabella del database corrente:

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

Usa il use comando per cambiare database senza modificare la connessione:

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

Puoi anche specificare esplicitamente lo schema:

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

Ora puoi creare tabelle in diversi schemi all'interno del tuo database corrente:

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

Il percorso di ricerca determina a quali oggetti dello schema si accede quando non si specifica uno schema:

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

Modifica l'ordine degli schemi per accedere a diverse tabelle:

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)

Passa a un altro database mantenendo la connessione originale:

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

Quando si cambia database, il percorso di ricerca viene ripristinato ai valori predefiniti:

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

Crea una tabella e inserisci i dati nel tuo database corrente:

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)

Nelle transazioni, è possibile scrivere nel database corrente e leggere da qualsiasi database utilizzando una notazione in tre parti. Ciò include anche il database connesso:

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)

Ripristina il database connesso. Tieni presente che questo non solo ripristina il database utilizzato in precedenzapdb, ma ripristina anche il database connesso. Anche il percorso di ricerca passa a quello predefinito:

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)

È possibile modificare i database all'inizio di una transazione, ma non dopo aver eseguito le query:

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)

Esempio di Data Catalog

Innanzitutto, crea tabelle in schemi e cataloghi diversi per dimostrare le interrogazioni tra cataloghi. Inizia creando tabelle nel database connesso.

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

Ora, crea tabelle simili in un catalogo diverso. Questo dimostra come lavorare con i database tra cataloghi.

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

Controlla il contesto corrente del database. Senza impostare esplicitamente un database, il sistema utilizza il database connesso.

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)

Imposta il USEd database per interrogare le tabelle di un catalogo diverso.

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)

Quando si interroga la tabella t, i risultati provengono dal database intercatalogo.

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)

Modifica il percorso di ricerca per accedere alle tabelle in diversi schemi all'interno del database. 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)

Anche se USE è impostato su un database a più cataloghi, è comunque possibile interrogare in modo esplicito il database originale.

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

Reimposta il USEd database in modo che faccia nuovamente riferimento agli oggetti nel database connesso.

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

Nota che search_path viene ripristinato quando USE viene ripristinato.

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

Dopo il ripristino, le query ora si riferiscono al database connesso originale.

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)

È possibile modificare il percorso di ricerca nel database originale per accedere a schemi diversi.

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)