-- complain if script is sourced in psql, rather than via CREATE EXTENSION \echo Use "CREATE EXTENSION pg_readme" to load this file. \quit -------------------------------------------------------------------------------------------------------------- -- Don't render “extension”/“schema” as inline code phrase. create or replace function pg_readme_colophon( collection_type$ pg_readme_collection_type ,collection_name$ name ,context_division_depth$ smallint = 1 ,context_division_is_self$ boolean = false ,division_title$ text = 'Colophon' ) returns text immutable leakproof parallel safe return case when not context_division_is_self$ then repeat('#', context_division_depth$ + 1) || ' ' || division_title$ || E'\n' else '' end || format( E'\nThis `README.md` for the `%s` %s was automatically generated using the [`pg_readme`](https://github.com/bigsmoke/pg_readme) PostgreSQL extension.\n', collection_name$, collection_type$ ); -------------------------------------------------------------------------------------------------------------- create or replace procedure test__pg_readme() set search_path from current set pg_readme.include_this_routine_definition to false set plpgsql.check_asserts to true language plpgsql as $plpgsql$ declare _generated_extension_readme text; _expected_extension_readme text; begin create extension pg_readme_test_extension with version 'forever'; _expected_extension_readme := format( $markdown$--- pg_extension_name: pg_readme_test_extension pg_extension_version: %s pg_readme_generated_at: %s pg_readme_version: %s --- # `pg_readme_test_extension` The `pg_readme_test_extension` PostgreSQL extension is sort of a sub-extension of `pg_readme`, in the sense that the former's purpose is to test the latter's capability to generate a comprehensive `README.md` for an extension. The reason that this extension exists as a separate set of `.control` and `sql` files is because we need an extension to fully test `pg_readme` its `pg_extension_readme()` function. ## Reference ### Tables There are 2 tables that directly belong to the `pg_readme_test_extension` extension. #### Table: `my_table` A table with a comment. The `my_table` table has 3 attributes: 1. `my_table.a` `bigint` - `NOT NULL` - `GENERATED ALWAYS AS IDENTITY` - `PRIMARY KEY (a)` 2. `my_table.b` `bigint` - `NOT NULL` - `GENERATED ALWAYS AS (a + 2) STORED` - `UNIQUE (b)` 3. `my_table.z` `text` #### Table: `my_2nd_table` The `my_2nd_table` table has 3 attributes: 1. `my_2nd_table.a` `bigint` - `NOT NULL` - `PRIMARY KEY (a)` - `FOREIGN KEY (a) REFERENCES my_table(a) ON DELETE CASCADE` 2. `my_2nd_table.c` `bigint` - `NOT NULL` - `GENERATED BY DEFAULT AS IDENTITY` - `UNIQUE (c)` 3. `my_2nd_table.d` `timestamp without time zone` A column with a comment. Second paragraph of column comment. - `DEFAULT now()` ### Views #### View: `my_view` This is a view _with_ a `COMMENT`. ```sql SELECT my_table.a, my_table.b, my_2nd_table.*::my_2nd_table AS my_2nd_table, my_2nd_table.c, my_table.z FROM my_table LEFT JOIN my_2nd_table ON my_2nd_table.a = my_table.a; ``` #### View: `view_without_comment` ```sql SELECT my_table.a, my_table.b, my_2nd_table.*::my_2nd_table AS my_2nd_table, my_2nd_table.c, my_table.z FROM my_table JOIN my_2nd_table ON my_2nd_table.a = my_table.a; ``` ### Routines #### Function: `my_variadic_func (integer, integer[])` Function arguments: | Arg. # | Arg. mode | Argument name | Argument type | Default expression | | ------ | ---------- | ----------------------------------------------------------------- | -------------------------------------------------------------------- | ------------------- | | `$1` | `IN` | `boe$` | `integer` | | | `$2` | `VARIADIC` | `bla$` | `integer[]` | | Function return type: `void` #### Function: `my_view__upsert()` Function return type: `trigger` #### Procedure: `test__my_view()` Procedure-local settings: * `SET search_path TO readme, pg_temp` ```sql CREATE OR REPLACE PROCEDURE readme.test__my_view() LANGUAGE plpgsql SET search_path TO 'readme', 'pg_temp' AS $procedure$ declare _my_view my_view; begin insert into my_view (z) values ('blah') returning * into _my_view; update my_view set z = 'bleh' -- “bleh” is obviously better than “blah” where a = _my_view.a; delete from my_view where a = _my_view.a; raise transaction_rollback; -- I could have use any error code, but this one seemed to fit best. exception when transaction_rollback then end; $procedure$ ``` #### Procedure: `test__something_very_verbose()` Procedure-local settings: * `SET search_path TO readme, pg_temp` * `SET pg_readme.include_this_routine_definition TO false` ### Types The following extra types have been defined _besides_ the implicit composite types of the [tables](#tables) and [views](#views) in this extension. #### Domain: `my_upper` Must be uppercase text. ```sql CREATE DOMAIN my_upper AS text CHECK ((VALUE = upper(VALUE))); ``` #### Composite type: `my_composite_type` `my_composite_type` doesn't do much. ```sql CREATE TYPE my_composite_type AS ( "name with spaces" text[], created_at timestamp with time zone ); ``` ## Appendices ### Appendix A. Colophon This `README.md` for the `pg_readme_test_extension` extension was automatically generated using the [`pg_readme`](https://github.com/bigsmoke/pg_readme) PostgreSQL extension.$markdown$, pg_installed_extension_version('pg_readme_test_extension'), now(), pg_installed_extension_version('pg_readme') ); _generated_extension_readme := pg_extension_readme('pg_readme_test_extension'); assert _generated_extension_readme = _expected_extension_readme, format( E'Generated extension README is not what expected (%s vs %s chars):\n\n%s', length(_generated_extension_readme), length(_expected_extension_readme), string_diff(_generated_extension_readme, _expected_extension_readme) ); create schema test__pg_readme; comment on schema test__pg_readme is $markdown$ # `test__pg_readme` – THE schema of schemas This schema is amazing! $markdown$; create table test__pg_readme.table1 (id int); comment on table test__pg_readme.table1 is $markdown$ This table has a `COMMENT` that describes it. $markdown$; create function test__pg_readme.func(int, text, bool[]) returns bool language sql return true; create function test__pg_readme.func(int, text) returns bool language sql return true; assert pg_schema_readme('test__pg_readme') = format( $markdown$--- pg_schema_name: test__pg_readme pg_readme_generated_at: %s pg_readme_version: %s --- # `test__pg_readme` – THE schema of schemas This schema is amazing! ### Object reference #### Tables There are 1 tables within the `test__pg_readme` schema. ##### Table: `table1` This table has a `COMMENT` that describes it. The `table1` table has 1 attributes: 1. `table1.id` `integer` #### Routines ##### Function: `test__pg_readme.func (integer, text)` Function arguments: | Arg. # | Arg. mode | Argument name | Argument type | Default expression | | ------ | ---------- | ----------------------------------------------------------------- | -------------------------------------------------------------------- | ------------------- | | `$1` | `IN` | | `integer` | | | `$2` | `IN` | | `text` | | Function return type: `boolean` ##### Function: `test__pg_readme.func (integer, text, boolean[])` Function arguments: | Arg. # | Arg. mode | Argument name | Argument type | Default expression | | ------ | ---------- | ----------------------------------------------------------------- | -------------------------------------------------------------------- | ------------------- | | `$1` | `IN` | | `integer` | | | `$2` | `IN` | | `text` | | | `$3` | `IN` | | `boolean[]` | | Function return type: `boolean` ### Colophon This `README.md` for the `test__pg_readme` schema was automatically generated using the [`pg_readme`](https://github.com/bigsmoke/pg_readme) PostgreSQL extension.$markdown$, now(), pg_installed_extension_version('pg_readme') ), pg_schema_readme('test__pg_readme'); raise transaction_rollback; -- I could have use any error code, but this one seemed to fit best. exception when transaction_rollback then end; $plpgsql$; --------------------------------------------------------------------------------------------------------------