Règle d'automatisation Jira pour le merge d'une pull request
Posted by: AJ Welch
Amazon Redshift retains a great deal of metadata about the various databases within a cluster and finding a list of tables is no exception to this rule.
The most useful object for this task is the PG_TABLE_DEF table, which as the name implies, contains table definition information. Note: The PG_
prefix is just a holdover from PostgreSQL, the database technology from which Amazon Redshift was developed.
To begin finding information about the tables in the system, you can simply return columns from PG_TABLE_DEF
:
SELECT
*
FROM
PG_TABLE_DEF;
For better or worse, PG_TABLE_DEF
contains information about everything in the system, so the results of such an open query will be massive, but should give you an idea of what PG_TABLE_DEF
is capable of:
schemaname tablename column type encoding distkey sortkey notnull
--------------------------------------------------------------------------------------------------------
pg_catalog padb_config_harvest name character(136) none false 0 true
pg_catalog padb_config_harvest harvest integer none false 0 true
pg_catalog padb_config_harvest archive integer none false 0 true
pg_catalog padb_config_harvest directory character(500) none false 0 true
pg_catalog pg_aggregate aggfnoid regproc none false 0 true
pg_catalog pg_aggregate aggtransfn regproc none false 0 true
pg_catalog pg_aggregate aggfinalfn regproc none false 0 true
pg_catalog pg_aggregate aggtranstype oid none false 0 true
pg_catalog pg_aggregate agginitval text none false 0 false
pg_catalog pg_aggregate_fnoid_index aggfnoid regproc none false 0 false
pg_catalog pg_am amname name none false 0 true
pg_catalog pg_am amowner integer none false 0 true
pg_catalog pg_am amstrategies smallint none false 0 true
To limit the results to user-defined tables, it’s important to specify the schemaname
column to return only results which are public
:
SELECT
*
FROM
PG_TABLE_DEF
WHERE
schemaname = 'public';
schemaname tablename column type encoding distkey sortkey notnull
-------------------------------------------------------------------------------------------
public category catid smallint none true 1 true
public category catgroup character varying(10) none false 0 false
public category catname character varying(10) none false 0 false
public category catdesc character varying(50) none false 0 false
public date dateid smallint none true 1 true
public date caldate date none false 0 true
public event eventid integer none true 0 true
public event venueid smallint none false 0 true
public event catid smallint none false 0 true
This shows us all the columns
(and their associated tables
) that exist and that are public
(and therefore user-created).
Lastly, if we are solely interested only the names
of tables
which are user-defined, we’ll need to filter the above results by retrieving DISTINCT
items from within the tablename
column:
SELECT
DISTINCT tablename
FROM
PG_TABLE_DEF
WHERE
schemaname = 'public';
This returns only the unique public tables
within the system:
tablename
---------
category
date
event
listing
sales
users
venue
There we have it! A simple yet effective method for retrieving table information from within your Amazon Redshift cluster.