

 Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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à.

# Eseguire query sulle tabelle e sulle viste di sistema
<a name="t_querying_redshift_system_tables"></a>

Oltre alle tabelle che hai creato, il data warehouse contiene numerose tabelle e viste di sistema. Queste tabelle e viste di sistema contengono informazioni sull’installazione e sulle varie query e sui vari processi in esecuzione sul sistema. Puoi eseguire query su queste tabelle e viste di sistema per raccogliere informazioni sul database. Per ulteriori informazioni, consulta [Riferimento di tabelle e viste di sistema](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html) nella *Guida per sviluppatori di database di Amazon Redshift*. La descrizione per ogni tabella o vista indica se una tabella è visibile a tutti gli utenti o solo agli utenti con privilegi avanzati. Per eseguire una query su tabelle visibili solo agli utenti con privilegi avanzati, è necessario accedere come utente con privilegi avanzati. 

## Visualizza un elenco di nomi di tabella
<a name="t_querying_redshift_system_tables-view-a-list-of-table-names"></a>

Per visualizzare un elenco di tutte le tabelle in uno schema, è possibile eseguire una query sulla tabella del catalogo di sistema PG\$1TABLE\$1DEF. È possibile prima esaminare l'impostazione per `search_path`.

```
SHOW search_path;
```

Il risultato dovrebbe essere simile al seguente,

```
  search_path
---------------
 $user, public
```

Nell'esempio seguente lo schema `SALES` viene aggiunto al percorso di ricerca e sono mostrate tutte le tabelle presenti nello schema `SALES`.

```
set search_path to '$user', 'public', 'sales';
                
SHOW search_path;

      search_path       
------------------------
 "$user", public, sales


select * from pg_table_def where schemaname = 'sales';

 schemaname | tablename |  column  |          type          | encoding | distkey | sortkey | notnull 
------------+-----------+----------+------------------------+----------+---------+---------+---------
 sales      | demo      | personid | integer                | az64     | f       |       0 | f
 sales      | demo      | city     | character varying(255) | lzo      | f       |       0 | f
```

L'esempio seguente mostra un elenco di tutte le tabelle denominate `DEMO` in tutti gli schemi del database corrente.

```
set search_path to '$user', 'public', 'sales';
select * from pg_table_def where tablename = 'demo';

 schemaname | tablename |  column  |          type          | encoding | distkey | sortkey | notnull 
------------+-----------+----------+------------------------+----------+---------+---------+---------
 public     | demo      | personid | integer                | az64     | f       |       0 | f
 public     | demo      | city     | character varying(255) | lzo      | f       |       0 | f
 sales      | demo      | personid | integer                | az64     | f       |       0 | f
 sales      | demo      | city     | character varying(255) | lzo      | f       |       0 | f
```

Per ulteriori informazioni, consultare [PG\$1TABLE\$1DEF](https://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html).

Puoi inoltre utilizzare Amazon Redshift Query Editor V2 per visualizzare tutte le tabelle in uno schema specificato scegliendo innanzitutto un database a cui connetterti.

## Visualizzazione degli utenti
<a name="t_querying_redshift_system_tables-view-database-users"></a>

È possibile eseguire una query sul catalogo PG\$1USER per visualizzare un elenco di tutti gli utenti del database, insieme all'ID utente (USESYSID) e ai privilegi degli utenti. 

```
SELECT * FROM pg_user;

  usename   | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+-----------
 rdsdb      |        1 | true        | true     | true      | ******** | infinity |
 awsuser    |      100 | true        | true     | false     | ******** |          |
 guest      |      104 | true        | false    | false     | ******** |          |
```

Il nome utente `rdsdb` viene utilizzato internamente da Amazon Redshift per eseguire attività di amministrazione e manutenzione di routine. È possibile filtrare la query in modo da visualizzare solo nomi utente definiti dall'utente aggiungendo `where usesysid > 1` all'istruzione SELECT.

```
SELECT * FROM pg_user WHERE usesysid > 1;

  usename   | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+-----------
 awsuser    |      100 | true        | true     | false     | ******** |          |
 guest      |      104 | true        | false    | false     | ******** |          |
```

## Visualizza le query recenti
<a name="t_querying_redshift_system_tables-view-recent-queries"></a>

Nell’esempio precedente, l’ID utente (user\$1id) per `adminuser` è 100. Per elencare le quattro query più recenti eseguite da `adminuser`, puoi sottoporre a query la vista SYS\$1QUERY\$1HISTORY. 

Puoi utilizzare questa vista per trovare l’ID query (query\$1id) o l’ID processo (session\$1id) per una query eseguita di recente. È inoltre possibile utilizzare questa vista per verificare quanto tempo ha richiesto il completamento di una query. SYS\$1QUERY\$1HISTORY include i primi 4.000 caratteri della stringa di query (query\$1text) per aiutarti a individuare una query specifica. Utilizza la clausola LIMIT con l’istruzione SELECT per limitare i risultati. 

```
SELECT query_id, session_id, elapsed_time, query_text 
FROM sys_query_history
WHERE user_id = 100
ORDER BY start_time desc
LIMIT 4;
```

Il risultato è simile al seguente. 

```
 query_id |  session_id  |  elapsed_time |   query_text
----------+--------------+---------------+----------------------------------------------------------------
 892      |    21046     |       55868   | SELECT query, pid, elapsed, substring from ...
 620      |    17635     |     1296265   | SELECT query, pid, elapsed, substring from ...
 610      |    17607     |       82555   | SELECT * from DEMO; 
 596      |    16762     |      226372   | INSERT INTO DEMO VALUES (100);
```

## Determinare l’ID sessione di una query in esecuzione
<a name="determine_pid"></a>

Per recuperare le informazioni sulle tabelle di sistema, potresti dover specificare l’ID sessione (ID processo) associato alla query. Potresti dover trovare l’ID sessione per una query ancora in fase di esecuzione. Ad esempio, hai bisogno dell’ID sessione se devi annullare una query la cui esecuzione dura troppo a lungo su un cluster con provisioning. È possibile interrogare la tabella di sistema STV\$1RECENTS per ottenere un elenco di sessioni IDs per l'esecuzione delle query, insieme alla stringa di query corrispondente. Se la query restituisce più ID sessione, puoi esaminare il testo della query per determinare l’ID sessione necessario.

Per determinare l’ID sessione di una query in esecuzione, esegui l’istruzione SELECT seguente.

```
SELECT session_id, user_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
```