Did you know that you can annotate database object like tables, views and columns with comments in many SQL database systems? By that I don’t mean comments in SQL scripts, indicated by double dashes (--
), but comments attached to the objects themselves, stored in the database. These may be helpful to the database admin by providing context via a description text on what is stored in these objects.
For PostgreSQL and Oracle databases the syntax is as follows:
COMMENT ON TABLE [schema_name.]table_name IS '...';
COMMENT ON COLUMN [schema_name.]table_name.column_name IS '...';
For example:
COMMENT ON COLUMN books.author IS 'The main author''s last name';
COMMENT ON TABLE books IS 'Contains only the best books';
These comments can be viewed in database tools like SQL Developer:


You can also view the comments in psql:
db=# \d+ books
Column | Type | Description
--------+---------+------------------------------
id | integer |
author | text | The main author''s last name
title | text |
And for a table:
db=# \dt+ books
List of relations
Schema | Name | Type | | Description
--------+-------+-------+ ... +------------------------------
public | books | table | | Contains only the best books
In Oracle you can query the comments from the data dictionary views ALL_TAB_COMMENTS
and ALL_COL_COMMENTS
:
> SELECT * FROM all_col_comments WHERE table_name='BOOKS';
OWNER TABLE_NAME COLUMN_NAME COMMENTS
--------------------------------------------------------------
LIBRARY BOOKS ID (null)
LIBRARY BOOKS AUTHOR The main author's last name
LIBRARY BOOKS TITLE (null)
> SELECT * FROM all_tab_comments WHERE table_name='BOOKS';
OWNER TABLE_NAME TABLE_TYPE COMMENTS
--------------------------------------------------------------
LIBRARY BOOKS TABLE Contains only the best books
In Oracle comments are limited to tables, views, materialized views, columns, operators and indextypes, but in PostgreSQL you can attach comments to nearly everything. Another good use case for this are documentation comments on database functions:
COMMENT ON FUNCTION my_function IS $$
This function does something important.
Parameters:
...
Example usage:
...
$$;
Note: the $$
delimits multi-line strings (called dollar quoted string constants).