Quantcast
Channel: OracleDB – The Wiert Corner – irregular stream of stuff
Viewing all articles
Browse latest Browse all 20

INFORMATION_SCHEMA views in various databases

$
0
0

Few people know about the INFORMATION_SCHEMA views that have been there since SQL-92.

Two funny things about that standard:

A few reasons I can imagine not many people know about the INFORMATION_SCHEMA:

  • Not all relational database servers implement them, and of the ones that do implement them, not all versions implement all views.
    That’s what this article is about; currently it lists only SQL Server 2000 and 2008 R2 (tried both) and PostgreSQL (verified docs), but I will update it as soon as I have run the script on other versions of SQL server and database vendors.
  • It is hard to find the official ISO standards in a public way, and ISO itself sometimes puts things online, and at other times wants money for it

    I remember the Y2K preparation era where the ISO-8601 standard was freely available at http://www.iso.ch/markete/8601.pdf, soon after the Year 2000, the PDF got locked behind a payment engine.
    ISO suffers from heavy link rot too, for instance the ISO 3166 country codes used to be at http://www.iso.org/iso/prods-services/iso3166ma, but are now at http://www.iso.org/iso/home/standards/country_codes.htm. What about HTTP 303 or 302 redirect here guys?

Since SQL-92, the INFORMATION_SCHEMA (and its twin DEFINITION_SCHEMA) have been extended. The last extension in 2008. Together they allow SQL databases to be self-describing (I think no vendor has attained that) and the structures queryable in a standard way

In fact that is the main purpose: these views in INFORMATION_SCHEMA are a very convenient standard way to query – in a vendor agnostic way – about tables, views, columns, etc.

The table below is based on (thanks to this Stack Overflow answer on INFORMATION_SCHEMA):

View 7 2000 2005 2008 2008 R2 2012
9.1.4
MariaDB  SQL-92   SQL:1999 SQL:2003 SQL:2006 SQL:2008 Notes
ADMINISTRABLE_ROLE_AUTHORIZATIONS ? ? ? ?
+
+
APPLICABLE_ROLES ? ? ? ?
+
+
ASSERTIONS ? ? ? ? ? + +
ATTRIBUTES ? ? ? ?
+
+
CHARACTER_SETS ? ? ? ?
+
+ +
CHECK_CONSTRAINTS ? + ? ? + ?
+
+ +
check_constraint_routine_usage ? ? ? ?
+
COLLATIONS ? ? ? ?
+
+ +
collation_character_set_applicability ? ? ? ?
+
COLUMNS ? + ? ? + ?
+
+ +
COLUMN_DOMAIN_USAGE ? + ? ? + ?
+
+ +
COLUMN_PRIVILEGES ? + ? ? + ?
+
+ +
COLUMN_USER_DEFINED_TYPE_USAGE ? ? ? ?
+
column_udt_usage

+
CONSTRAINT_COLUMN_USAGE ? + ? ? + ?
+
+ +
CONSTRAINT_TABLE_USAGE ? + ? ? + ?
+
+ +
data_type_privileges ? ? ? ?
+
DIRECT_SUPERTABLES ? ? ? ? +
DIRECT_SUPERTYPES ? ? ? ? +
DOMAINS ? + ? ? + ?
+
+ +
DOMAIN_CONSTRAINTS ? + ? ? + ?
+
+ +
DOMAIN_USER_DEFINED_TYPE_USAGE ? ? ? ?
+
domain_udt_usage

+
element_types ? ? ? ?
+
ENABLED_ROLES ? ? ? ?
+
+
foreign_data_wrapper_options ? ? ? ?
+
foreign_data_wrappers ? ? ? ?
+
foreign_server_options ? ? ? ?
+
foreign_servers ? ? ? ?
+
foreign_table_options ? ? ? ?
+
foreign_tables ? ? ? ?
+
KEY_COLUMN_USAGE ? + ? ? + ? + + +
METHOD_SPECIFICATIONS ? ? ? ? +
METHOD_SPECIFICATION_PARAMETERS ? ? ? ?
+
MODULES ? ? ? ? ? +
PARAMETERS ? + ? ? + ?
+
+ +
REFERENTIAL_CONSTRAINTS ? + ? ? + ?
+
+ +
ROLE_COLUMN_GRANTS ? ? ? ?
+
+
ROLE_ROUTINE_GRANTS ? ? ? ?
+
+
ROLE_TABLE_GRANTS ? ? ? ?
+
+
ROLE_USAGE_GRANTS ? ? ? ?
+
+
ROLE_USER_DEFINED_TYPE_GRANTS ? ? ? ?
+
ROUTINES ? + ? ? + ?
+
+ +
ROUTINE_COLUMNS ? + ? ? + ?
ROUTINE_COLUMN_USAGE ? ? ? ? +
ROUTINE_PRIVILEGES ? ? ? ?
+
+
ROUTINE_TABLE_USAGE ? ? ? ? +
SCHEMATA ? + ? ? + ?
+
+ +
sequences ? ? ? ?
+
SQL_FEATURES ? ? ? ?
+
+
SQL_IMPLEMENTATION_INFO ? ? ? ?
+
+
SQL_PACKAGES ? ? ? ?
+
+
sql_parts ? ? ? ?
+
SQL_SIZING ? ? ? ?
+
+
SQL_SIZING_PROFILES ? ? ? ?
+
+
SQL_LANGUAGES ? ? ? ?
+
+ +
TABLES ? + ? ? + ?
+
+ +
TABLE_CONSTRAINTS ? + ? ? + ?
+
+ +
TABLE_METHOD_PRIVILEGES ? ? ? ? +
TABLE_PRIVILEGES ? + ? ? + ?
+
+ +
TRANSFORMS ? ? ? ? +
TRANSLATIONS ? ? ? ? + +
TRIGGERED_UPDATE_COLUMNS ? ? ? ?
+

+
TRIGGERS ? ? ? ?
+
+
TRIGGER_COLUMN_USAGE ? ? ? ? +
TRIGGER_TABLE_USAGE ? ? ? ? +
TYPE_INFO ? ? ? ? +
USAGE_PRIVILEGES ? ? ? ?
+
+ +
USER_DEFINED_TYPE_PRIVILEGES ? ? ? ?
+
USER_DEFINED_TYPES ? ? ? ? +
user_mappings ? ? ? ?
+
user_mapping_options ? ? ? ?
+
VIEWS ? + ? ? + ? + + +
VIEW_COLUMN_USAGE ? + ? ? + ?
+
+ +
view_routine_usage ? ? ? ?
+
VIEW_TABLE_USAGE ? + ? ? + ?
+
+ +
 INFORMATION_SCHEMA Views   Count

And here is the SQL script I used to test each view:

select * from INFORMATION_SCHEMA.ADMINISTRABLE_ROLE_AUTHORIZATIONS
select * from INFORMATION_SCHEMA.APPLICABLE_ROLES
select * from INFORMATION_SCHEMA.ASSERTIONS
select * from INFORMATION_SCHEMA.ATTRIBUTES
select * from INFORMATION_SCHEMA.CHARACTER_SETS
select * from INFORMATION_SCHEMA.CHECK_CONSTRAINTS
select * from INFORMATION_SCHEMA.COLLATIONS
select * from INFORMATION_SCHEMA.COLUMNS
select * from INFORMATION_SCHEMA.COLUMN_DOMAIN_USAGE
select * from INFORMATION_SCHEMA.COLUMN_PRIVILEGES
select * from INFORMATION_SCHEMA.COLUMN_USER_DEFINED_TYPE_USAGE
select * from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
select * from INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
select * from INFORMATION_SCHEMA.DIRECT_SUPERTABLES
select * from INFORMATION_SCHEMA.DIRECT_SUPERTYPES
select * from INFORMATION_SCHEMA.DOMAINS
select * from INFORMATION_SCHEMA.DOMAIN_CONSTRAINTS
select * from INFORMATION_SCHEMA.DOMAIN_USER_DEFINED_TYPE_USAGE
select * from INFORMATION_SCHEMA.ENABLED_ROLES
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE
select * from INFORMATION_SCHEMA.METHOD_SPECIFICATIONS
select * from INFORMATION_SCHEMA.METHOD_SPECIFICATION_PARAMETERS
select * from INFORMATION_SCHEMA.MODULES
select * from INFORMATION_SCHEMA.PARAMETERS
select * from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
select * from INFORMATION_SCHEMA.ROLE_COLUMN_GRANTS
select * from INFORMATION_SCHEMA.ROLE_ROUTINE_GRANTS
select * from INFORMATION_SCHEMA.ROLE_TABLE_GRANTS
select * from INFORMATION_SCHEMA.ROLE_USAGE_GRANTS
select * from INFORMATION_SCHEMA.ROLE_USER_DEFINED_TYPE_GRANTS
select * from INFORMATION_SCHEMA.ROUTINES
select * from INFORMATION_SCHEMA.ROUTINE_COLUMNS
select * from INFORMATION_SCHEMA.ROUTINE_COLUMN_USAGE
select * from INFORMATION_SCHEMA.ROUTINE_PRIVILEGES
select * from INFORMATION_SCHEMA.ROUTINE_TABLE_USAGE
select * from INFORMATION_SCHEMA.SCHEMATA
select * from INFORMATION_SCHEMA.SQL_FEATURES
select * from INFORMATION_SCHEMA.SQL_IMPLEMENTATION_INFO
select * from INFORMATION_SCHEMA.SQL_PACKAGES
select * from INFORMATION_SCHEMA.SQL_SIZING
select * from INFORMATION_SCHEMA.SQL_SIZING_PROFILES
select * from INFORMATION_SCHEMA.SQL_LANGUAGES
select * from INFORMATION_SCHEMA.TABLES
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
select * from INFORMATION_SCHEMA.TABLE_METHOD_PRIVILEGES
select * from INFORMATION_SCHEMA.TABLE_PRIVILEGES
select * from INFORMATION_SCHEMA.TRANSFORMS
select * from INFORMATION_SCHEMA.TRANSLATIONS
select * from INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS
select * from INFORMATION_SCHEMA.TRIGGERS
select * from INFORMATION_SCHEMA.TRIGGER_COLUMN_USAGE
select * from INFORMATION_SCHEMA.TRIGGER_TABLE_USAGE
select * from INFORMATION_SCHEMA.TYPE_INFO
select * from INFORMATION_SCHEMA.USAGE_PRIVILEGES
select * from INFORMATION_SCHEMA.USER_DEFINED_TYPE_PRIVILEGES
select * from INFORMATION_SCHEMA.USER_DEFINED_TYPES
select * from INFORMATION_SCHEMA.VIEWS
select * from INFORMATION_SCHEMA.VIEW_COLUMN_USAGE
select * from INFORMATION_SCHEMA.VIEW_TABLE_USAGE

–jeroen


Filed under: Database Development, Development, Firebird, InterBase, ISO 8601, MySQL, OracleDB, PostgreSQL, Power User, SQL, SQL Server, SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 7, Sybase

Viewing all articles
Browse latest Browse all 20

Trending Articles