/*
 * *** Do not change this file by hand. It is automatically
 * *** generated from the DocBook documentation.
 *
 * generated by src/bin/psql/create_help.pl
 *
 */

#define N_(x) (x)				/* gettext noop */

#include "postgres_fe.h"
#include "sql_help.h"

static void
sql_help_ABORT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ABORT [ WORK | TRANSACTION ]");
}

static void
sql_help_ALTER_AGGREGATE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER AGGREGATE %s ( %s ) RENAME TO %s\n"
					  "ALTER AGGREGATE %s ( %s )\n"
					  "                OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER AGGREGATE %s ( %s ) SET SCHEMA %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "* |\n"
					  "[ %s ] [ %s ] %s [ , ... ] |\n"
					  "[ [ %s ] [ %s ] %s [ , ... ] ] ORDER BY [ %s ] [ %s ] %s [ , ... ]",
					  _("name"),
					  _("aggregate_signature"),
					  _("new_name"),
					  _("name"),
					  _("aggregate_signature"),
					  _("new_owner"),
					  _("name"),
					  _("aggregate_signature"),
					  _("new_schema"),
					  _("where aggregate_signature is:"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"));
}

static void
sql_help_ALTER_COLLATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER COLLATION %s REFRESH VERSION\n"
					  "\n"
					  "ALTER COLLATION %s RENAME TO %s\n"
					  "ALTER COLLATION %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER COLLATION %s SET SCHEMA %s",
					  _("name"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_schema"));
}

static void
sql_help_ALTER_CONVERSION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER CONVERSION %s RENAME TO %s\n"
					  "ALTER CONVERSION %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER CONVERSION %s SET SCHEMA %s",
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_schema"));
}

static void
sql_help_ALTER_DATABASE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER DATABASE %s [ [ WITH ] %s [ ... ] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ALLOW_CONNECTIONS %s\n"
					  "    CONNECTION LIMIT %s\n"
					  "    IS_TEMPLATE %s\n"
					  "\n"
					  "ALTER DATABASE %s RENAME TO %s\n"
					  "\n"
					  "ALTER DATABASE %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "\n"
					  "ALTER DATABASE %s SET TABLESPACE %s\n"
					  "\n"
					  "ALTER DATABASE %s SET %s { TO | = } { %s | DEFAULT }\n"
					  "ALTER DATABASE %s SET %s FROM CURRENT\n"
					  "ALTER DATABASE %s RESET %s\n"
					  "ALTER DATABASE %s RESET ALL",
					  _("name"),
					  _("option"),
					  _("where option can be:"),
					  _("allowconn"),
					  _("connlimit"),
					  _("istemplate"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_tablespace"),
					  _("name"),
					  _("configuration_parameter"),
					  _("value"),
					  _("name"),
					  _("configuration_parameter"),
					  _("name"),
					  _("configuration_parameter"),
					  _("name"));
}

static void
sql_help_ALTER_DEFAULT_PRIVILEGES(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER DEFAULT PRIVILEGES\n"
					  "    [ FOR { ROLE | USER } %s [, ...] ]\n"
					  "    [ IN SCHEMA %s [, ...] ]\n"
					  "    %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }\n"
					  "    [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON TABLES\n"
					  "    TO { [ GROUP ] %s | PUBLIC } [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { { USAGE | SELECT | UPDATE }\n"
					  "    [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON SEQUENCES\n"
					  "    TO { [ GROUP ] %s | PUBLIC } [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { EXECUTE | ALL [ PRIVILEGES ] }\n"
					  "    ON { FUNCTIONS | ROUTINES }\n"
					  "    TO { [ GROUP ] %s | PUBLIC } [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON TYPES\n"
					  "    TO { [ GROUP ] %s | PUBLIC } [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { USAGE | CREATE | ALL [ PRIVILEGES ] }\n"
					  "    ON SCHEMAS\n"
					  "    TO { [ GROUP ] %s | PUBLIC } [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }\n"
					  "    [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON TABLES\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { { USAGE | SELECT | UPDATE }\n"
					  "    [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON SEQUENCES\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { EXECUTE | ALL [ PRIVILEGES ] }\n"
					  "    ON { FUNCTIONS | ROUTINES }\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON TYPES\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { USAGE | CREATE | ALL [ PRIVILEGES ] }\n"
					  "    ON SCHEMAS\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]",
					  _("target_role"),
					  _("schema_name"),
					  _("abbreviated_grant_or_revoke"),
					  _("where abbreviated_grant_or_revoke is one of:"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"));
}

static void
sql_help_ALTER_DOMAIN(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER DOMAIN %s\n"
					  "    { SET DEFAULT %s | DROP DEFAULT }\n"
					  "ALTER DOMAIN %s\n"
					  "    { SET | DROP } NOT NULL\n"
					  "ALTER DOMAIN %s\n"
					  "    ADD %s [ NOT VALID ]\n"
					  "ALTER DOMAIN %s\n"
					  "    DROP CONSTRAINT [ IF EXISTS ] %s [ RESTRICT | CASCADE ]\n"
					  "ALTER DOMAIN %s\n"
					  "     RENAME CONSTRAINT %s TO %s\n"
					  "ALTER DOMAIN %s\n"
					  "    VALIDATE CONSTRAINT %s\n"
					  "ALTER DOMAIN %s\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER DOMAIN %s\n"
					  "    RENAME TO %s\n"
					  "ALTER DOMAIN %s\n"
					  "    SET SCHEMA %s",
					  _("name"),
					  _("expression"),
					  _("name"),
					  _("name"),
					  _("domain_constraint"),
					  _("name"),
					  _("constraint_name"),
					  _("name"),
					  _("constraint_name"),
					  _("new_constraint_name"),
					  _("name"),
					  _("constraint_name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"));
}

static void
sql_help_ALTER_EVENT_TRIGGER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER EVENT TRIGGER %s DISABLE\n"
					  "ALTER EVENT TRIGGER %s ENABLE [ REPLICA | ALWAYS ]\n"
					  "ALTER EVENT TRIGGER %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER EVENT TRIGGER %s RENAME TO %s",
					  _("name"),
					  _("name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_name"));
}

static void
sql_help_ALTER_EXTENSION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER EXTENSION %s UPDATE [ TO %s ]\n"
					  "ALTER EXTENSION %s SET SCHEMA %s\n"
					  "ALTER EXTENSION %s ADD %s\n"
					  "ALTER EXTENSION %s DROP %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "  ACCESS METHOD %s |\n"
					  "  AGGREGATE %s ( %s ) |\n"
					  "  CAST (%s AS %s) |\n"
					  "  COLLATION %s |\n"
					  "  CONVERSION %s |\n"
					  "  DOMAIN %s |\n"
					  "  EVENT TRIGGER %s |\n"
					  "  FOREIGN DATA WRAPPER %s |\n"
					  "  FOREIGN TABLE %s |\n"
					  "  FUNCTION %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] |\n"
					  "  MATERIALIZED VIEW %s |\n"
					  "  OPERATOR %s (%s, %s) |\n"
					  "  OPERATOR CLASS %s USING %s |\n"
					  "  OPERATOR FAMILY %s USING %s |\n"
					  "  [ PROCEDURAL ] LANGUAGE %s |\n"
					  "  PROCEDURE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] |\n"
					  "  ROUTINE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] |\n"
					  "  SCHEMA %s |\n"
					  "  SEQUENCE %s |\n"
					  "  SERVER %s |\n"
					  "  TABLE %s |\n"
					  "  TEXT SEARCH CONFIGURATION %s |\n"
					  "  TEXT SEARCH DICTIONARY %s |\n"
					  "  TEXT SEARCH PARSER %s |\n"
					  "  TEXT SEARCH TEMPLATE %s |\n"
					  "  TRANSFORM FOR %s LANGUAGE %s |\n"
					  "  TYPE %s |\n"
					  "  VIEW %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "* |\n"
					  "[ %s ] [ %s ] %s [ , ... ] |\n"
					  "[ [ %s ] [ %s ] %s [ , ... ] ] ORDER BY [ %s ] [ %s ] %s [ , ... ]",
					  _("name"),
					  _("new_version"),
					  _("name"),
					  _("new_schema"),
					  _("name"),
					  _("member_object"),
					  _("name"),
					  _("member_object"),
					  _("where member_object is:"),
					  _("object_name"),
					  _("aggregate_name"),
					  _("aggregate_signature"),
					  _("source_type"),
					  _("target_type"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("function_name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("object_name"),
					  _("operator_name"),
					  _("left_type"),
					  _("right_type"),
					  _("object_name"),
					  _("index_method"),
					  _("object_name"),
					  _("index_method"),
					  _("object_name"),
					  _("procedure_name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("routine_name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("type_name"),
					  _("lang_name"),
					  _("object_name"),
					  _("object_name"),
					  _("and aggregate_signature is:"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"));
}

static void
sql_help_ALTER_FOREIGN_DATA_WRAPPER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER FOREIGN DATA WRAPPER %s\n"
					  "    [ HANDLER %s | NO HANDLER ]\n"
					  "    [ VALIDATOR %s | NO VALIDATOR ]\n"
					  "    [ OPTIONS ( [ ADD | SET | DROP ] %s ['%s'] [, ... ]) ]\n"
					  "ALTER FOREIGN DATA WRAPPER %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER FOREIGN DATA WRAPPER %s RENAME TO %s",
					  _("name"),
					  _("handler_function"),
					  _("validator_function"),
					  _("option"),
					  _("value"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_name"));
}

static void
sql_help_ALTER_FOREIGN_TABLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] %s [ * ]\n"
					  "    %s [, ... ]\n"
					  "ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] %s [ * ]\n"
					  "    RENAME [ COLUMN ] %s TO %s\n"
					  "ALTER FOREIGN TABLE [ IF EXISTS ] %s\n"
					  "    RENAME TO %s\n"
					  "ALTER FOREIGN TABLE [ IF EXISTS ] %s\n"
					  "    SET SCHEMA %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ADD [ COLUMN ] %s %s [ COLLATE %s ] [ %s [ ... ] ]\n"
					  "    DROP [ COLUMN ] [ IF EXISTS ] %s [ RESTRICT | CASCADE ]\n"
					  "    ALTER [ COLUMN ] %s [ SET DATA ] TYPE %s [ COLLATE %s ]\n"
					  "    ALTER [ COLUMN ] %s SET DEFAULT %s\n"
					  "    ALTER [ COLUMN ] %s DROP DEFAULT\n"
					  "    ALTER [ COLUMN ] %s { SET | DROP } NOT NULL\n"
					  "    ALTER [ COLUMN ] %s SET STATISTICS %s\n"
					  "    ALTER [ COLUMN ] %s SET ( %s = %s [, ... ] )\n"
					  "    ALTER [ COLUMN ] %s RESET ( %s [, ... ] )\n"
					  "    ALTER [ COLUMN ] %s SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }\n"
					  "    ALTER [ COLUMN ] %s OPTIONS ( [ ADD | SET | DROP ] %s ['%s'] [, ... ])\n"
					  "    ADD %s [ NOT VALID ]\n"
					  "    VALIDATE CONSTRAINT %s\n"
					  "    DROP CONSTRAINT [ IF EXISTS ]  %s [ RESTRICT | CASCADE ]\n"
					  "    DISABLE TRIGGER [ %s | ALL | USER ]\n"
					  "    ENABLE TRIGGER [ %s | ALL | USER ]\n"
					  "    ENABLE REPLICA TRIGGER %s\n"
					  "    ENABLE ALWAYS TRIGGER %s\n"
					  "    SET WITH OIDS\n"
					  "    SET WITHOUT OIDS\n"
					  "    INHERIT %s\n"
					  "    NO INHERIT %s\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "    OPTIONS ( [ ADD | SET | DROP ] %s ['%s'] [, ... ])",
					  _("name"),
					  _("action"),
					  _("name"),
					  _("column_name"),
					  _("new_column_name"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"),
					  _("where action is one of:"),
					  _("column_name"),
					  _("data_type"),
					  _("collation"),
					  _("column_constraint"),
					  _("column_name"),
					  _("column_name"),
					  _("data_type"),
					  _("collation"),
					  _("column_name"),
					  _("expression"),
					  _("column_name"),
					  _("column_name"),
					  _("column_name"),
					  _("integer"),
					  _("column_name"),
					  _("attribute_option"),
					  _("value"),
					  _("column_name"),
					  _("attribute_option"),
					  _("column_name"),
					  _("column_name"),
					  _("option"),
					  _("value"),
					  _("table_constraint"),
					  _("constraint_name"),
					  _("constraint_name"),
					  _("trigger_name"),
					  _("trigger_name"),
					  _("trigger_name"),
					  _("trigger_name"),
					  _("parent_table"),
					  _("parent_table"),
					  _("new_owner"),
					  _("option"),
					  _("value"));
}

static void
sql_help_ALTER_FUNCTION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER FUNCTION %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    %s [ ... ] [ RESTRICT ]\n"
					  "ALTER FUNCTION %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    RENAME TO %s\n"
					  "ALTER FUNCTION %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER FUNCTION %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    SET SCHEMA %s\n"
					  "ALTER FUNCTION %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    DEPENDS ON EXTENSION %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT\n"
					  "    IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF\n"
					  "    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\n"
					  "    PARALLEL { UNSAFE | RESTRICTED | SAFE }\n"
					  "    COST %s\n"
					  "    ROWS %s\n"
					  "    SET %s { TO | = } { %s | DEFAULT }\n"
					  "    SET %s FROM CURRENT\n"
					  "    RESET %s\n"
					  "    RESET ALL",
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("action"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("new_name"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("new_owner"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("new_schema"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("extension_name"),
					  _("where action is one of:"),
					  _("execution_cost"),
					  _("result_rows"),
					  _("configuration_parameter"),
					  _("value"),
					  _("configuration_parameter"),
					  _("configuration_parameter"));
}

static void
sql_help_ALTER_GROUP(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER GROUP %s ADD USER %s [, ... ]\n"
					  "ALTER GROUP %s DROP USER %s [, ... ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    %s\n"
					  "  | CURRENT_USER\n"
					  "  | SESSION_USER\n"
					  "\n"
					  "ALTER GROUP %s RENAME TO %s",
					  _("role_specification"),
					  _("user_name"),
					  _("role_specification"),
					  _("user_name"),
					  _("where role_specification can be:"),
					  _("role_name"),
					  _("group_name"),
					  _("new_name"));
}

static void
sql_help_ALTER_INDEX(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER INDEX [ IF EXISTS ] %s RENAME TO %s\n"
					  "ALTER INDEX [ IF EXISTS ] %s SET TABLESPACE %s\n"
					  "ALTER INDEX %s ATTACH PARTITION %s\n"
					  "ALTER INDEX %s DEPENDS ON EXTENSION %s\n"
					  "ALTER INDEX [ IF EXISTS ] %s SET ( %s = %s [, ... ] )\n"
					  "ALTER INDEX [ IF EXISTS ] %s RESET ( %s [, ... ] )\n"
					  "ALTER INDEX [ IF EXISTS ] %s ALTER [ COLUMN ] %s\n"
					  "    SET STATISTICS %s\n"
					  "ALTER INDEX ALL IN TABLESPACE %s [ OWNED BY %s [, ... ] ]\n"
					  "    SET TABLESPACE %s [ NOWAIT ]",
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("tablespace_name"),
					  _("name"),
					  _("index_name"),
					  _("name"),
					  _("extension_name"),
					  _("name"),
					  _("storage_parameter"),
					  _("value"),
					  _("name"),
					  _("storage_parameter"),
					  _("name"),
					  _("column_number"),
					  _("integer"),
					  _("name"),
					  _("role_name"),
					  _("new_tablespace"));
}

static void
sql_help_ALTER_LANGUAGE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER [ PROCEDURAL ] LANGUAGE %s RENAME TO %s\n"
					  "ALTER [ PROCEDURAL ] LANGUAGE %s OWNER TO { %s | CURRENT_USER | SESSION_USER }",
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_owner"));
}

static void
sql_help_ALTER_LARGE_OBJECT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER LARGE OBJECT %s OWNER TO { %s | CURRENT_USER | SESSION_USER }",
					  _("large_object_oid"),
					  _("new_owner"));
}

static void
sql_help_ALTER_MATERIALIZED_VIEW(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER MATERIALIZED VIEW [ IF EXISTS ] %s\n"
					  "    %s [, ... ]\n"
					  "ALTER MATERIALIZED VIEW %s\n"
					  "    DEPENDS ON EXTENSION %s\n"
					  "ALTER MATERIALIZED VIEW [ IF EXISTS ] %s\n"
					  "    RENAME [ COLUMN ] %s TO %s\n"
					  "ALTER MATERIALIZED VIEW [ IF EXISTS ] %s\n"
					  "    RENAME TO %s\n"
					  "ALTER MATERIALIZED VIEW [ IF EXISTS ] %s\n"
					  "    SET SCHEMA %s\n"
					  "ALTER MATERIALIZED VIEW ALL IN TABLESPACE %s [ OWNED BY %s [, ... ] ]\n"
					  "    SET TABLESPACE %s [ NOWAIT ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ALTER [ COLUMN ] %s SET STATISTICS %s\n"
					  "    ALTER [ COLUMN ] %s SET ( %s = %s [, ... ] )\n"
					  "    ALTER [ COLUMN ] %s RESET ( %s [, ... ] )\n"
					  "    ALTER [ COLUMN ] %s SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }\n"
					  "    CLUSTER ON %s\n"
					  "    SET WITHOUT CLUSTER\n"
					  "    SET ( %s = %s [, ... ] )\n"
					  "    RESET ( %s [, ... ] )\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }",
					  _("name"),
					  _("action"),
					  _("name"),
					  _("extension_name"),
					  _("name"),
					  _("column_name"),
					  _("new_column_name"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"),
					  _("name"),
					  _("role_name"),
					  _("new_tablespace"),
					  _("where action is one of:"),
					  _("column_name"),
					  _("integer"),
					  _("column_name"),
					  _("attribute_option"),
					  _("value"),
					  _("column_name"),
					  _("attribute_option"),
					  _("column_name"),
					  _("index_name"),
					  _("storage_parameter"),
					  _("value"),
					  _("storage_parameter"),
					  _("new_owner"));
}

static void
sql_help_ALTER_OPERATOR(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER OPERATOR %s ( { %s | NONE } , { %s | NONE } )\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "\n"
					  "ALTER OPERATOR %s ( { %s | NONE } , { %s | NONE } )\n"
					  "    SET SCHEMA %s\n"
					  "\n"
					  "ALTER OPERATOR %s ( { %s | NONE } , { %s | NONE } )\n"
					  "    SET ( {  RESTRICT = { %s | NONE }\n"
					  "           | JOIN = { %s | NONE }\n"
					  "         } [, ... ] )",
					  _("name"),
					  _("left_type"),
					  _("right_type"),
					  _("new_owner"),
					  _("name"),
					  _("left_type"),
					  _("right_type"),
					  _("new_schema"),
					  _("name"),
					  _("left_type"),
					  _("right_type"),
					  _("res_proc"),
					  _("join_proc"));
}

static void
sql_help_ALTER_OPERATOR_CLASS(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER OPERATOR CLASS %s USING %s\n"
					  "    RENAME TO %s\n"
					  "\n"
					  "ALTER OPERATOR CLASS %s USING %s\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "\n"
					  "ALTER OPERATOR CLASS %s USING %s\n"
					  "    SET SCHEMA %s",
					  _("name"),
					  _("index_method"),
					  _("new_name"),
					  _("name"),
					  _("index_method"),
					  _("new_owner"),
					  _("name"),
					  _("index_method"),
					  _("new_schema"));
}

static void
sql_help_ALTER_OPERATOR_FAMILY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER OPERATOR FAMILY %s USING %s ADD\n"
					  "  {  OPERATOR %s %s ( %s, %s )\n"
					  "              [ FOR SEARCH | FOR ORDER BY %s ]\n"
					  "   | FUNCTION %s [ ( %s [ , %s ] ) ]\n"
					  "              %s [ ( %s [, ...] ) ]\n"
					  "  } [, ... ]\n"
					  "\n"
					  "ALTER OPERATOR FAMILY %s USING %s DROP\n"
					  "  {  OPERATOR %s ( %s [ , %s ] )\n"
					  "   | FUNCTION %s ( %s [ , %s ] )\n"
					  "  } [, ... ]\n"
					  "\n"
					  "ALTER OPERATOR FAMILY %s USING %s\n"
					  "    RENAME TO %s\n"
					  "\n"
					  "ALTER OPERATOR FAMILY %s USING %s\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "\n"
					  "ALTER OPERATOR FAMILY %s USING %s\n"
					  "    SET SCHEMA %s",
					  _("name"),
					  _("index_method"),
					  _("strategy_number"),
					  _("operator_name"),
					  _("op_type"),
					  _("op_type"),
					  _("sort_family_name"),
					  _("support_number"),
					  _("op_type"),
					  _("op_type"),
					  _("function_name"),
					  _("argument_type"),
					  _("name"),
					  _("index_method"),
					  _("strategy_number"),
					  _("op_type"),
					  _("op_type"),
					  _("support_number"),
					  _("op_type"),
					  _("op_type"),
					  _("name"),
					  _("index_method"),
					  _("new_name"),
					  _("name"),
					  _("index_method"),
					  _("new_owner"),
					  _("name"),
					  _("index_method"),
					  _("new_schema"));
}

static void
sql_help_ALTER_POLICY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER POLICY %s ON %s RENAME TO %s\n"
					  "\n"
					  "ALTER POLICY %s ON %s\n"
					  "    [ TO { %s | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ]\n"
					  "    [ USING ( %s ) ]\n"
					  "    [ WITH CHECK ( %s ) ]",
					  _("name"),
					  _("table_name"),
					  _("new_name"),
					  _("name"),
					  _("table_name"),
					  _("role_name"),
					  _("using_expression"),
					  _("check_expression"));
}

static void
sql_help_ALTER_PROCEDURE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER PROCEDURE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    %s [ ... ] [ RESTRICT ]\n"
					  "ALTER PROCEDURE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    RENAME TO %s\n"
					  "ALTER PROCEDURE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER PROCEDURE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    SET SCHEMA %s\n"
					  "ALTER PROCEDURE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    DEPENDS ON EXTENSION %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\n"
					  "    SET %s { TO | = } { %s | DEFAULT }\n"
					  "    SET %s FROM CURRENT\n"
					  "    RESET %s\n"
					  "    RESET ALL",
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("action"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("new_name"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("new_owner"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("new_schema"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("extension_name"),
					  _("where action is one of:"),
					  _("configuration_parameter"),
					  _("value"),
					  _("configuration_parameter"),
					  _("configuration_parameter"));
}

static void
sql_help_ALTER_PUBLICATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER PUBLICATION %s ADD TABLE [ ONLY ] %s [ * ] [, ...]\n"
					  "ALTER PUBLICATION %s SET TABLE [ ONLY ] %s [ * ] [, ...]\n"
					  "ALTER PUBLICATION %s DROP TABLE [ ONLY ] %s [ * ] [, ...]\n"
					  "ALTER PUBLICATION %s SET ( %s [= %s] [, ... ] )\n"
					  "ALTER PUBLICATION %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER PUBLICATION %s RENAME TO %s",
					  _("name"),
					  _("table_name"),
					  _("name"),
					  _("table_name"),
					  _("name"),
					  _("table_name"),
					  _("name"),
					  _("publication_parameter"),
					  _("value"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_name"));
}

static void
sql_help_ALTER_ROLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER ROLE %s [ WITH ] %s [ ... ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "      SUPERUSER | NOSUPERUSER\n"
					  "    | CREATEDB | NOCREATEDB\n"
					  "    | CREATEROLE | NOCREATEROLE\n"
					  "    | INHERIT | NOINHERIT\n"
					  "    | LOGIN | NOLOGIN\n"
					  "    | REPLICATION | NOREPLICATION\n"
					  "    | BYPASSRLS | NOBYPASSRLS\n"
					  "    | CONNECTION LIMIT %s\n"
					  "    | [ ENCRYPTED ] PASSWORD '%s' | PASSWORD NULL\n"
					  "    | VALID UNTIL '%s'\n"
					  "\n"
					  "ALTER ROLE %s RENAME TO %s\n"
					  "\n"
					  "ALTER ROLE { %s | ALL } [ IN DATABASE %s ] SET %s { TO | = } { %s | DEFAULT }\n"
					  "ALTER ROLE { %s | ALL } [ IN DATABASE %s ] SET %s FROM CURRENT\n"
					  "ALTER ROLE { %s | ALL } [ IN DATABASE %s ] RESET %s\n"
					  "ALTER ROLE { %s | ALL } [ IN DATABASE %s ] RESET ALL\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    %s\n"
					  "  | CURRENT_USER\n"
					  "  | SESSION_USER",
					  _("role_specification"),
					  _("option"),
					  _("where option can be:"),
					  _("connlimit"),
					  _("password"),
					  _("timestamp"),
					  _("name"),
					  _("new_name"),
					  _("role_specification"),
					  _("database_name"),
					  _("configuration_parameter"),
					  _("value"),
					  _("role_specification"),
					  _("database_name"),
					  _("configuration_parameter"),
					  _("role_specification"),
					  _("database_name"),
					  _("configuration_parameter"),
					  _("role_specification"),
					  _("database_name"),
					  _("where role_specification can be:"),
					  _("role_name"));
}

static void
sql_help_ALTER_ROUTINE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER ROUTINE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    %s [ ... ] [ RESTRICT ]\n"
					  "ALTER ROUTINE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    RENAME TO %s\n"
					  "ALTER ROUTINE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER ROUTINE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    SET SCHEMA %s\n"
					  "ALTER ROUTINE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ]\n"
					  "    DEPENDS ON EXTENSION %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF\n"
					  "    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\n"
					  "    PARALLEL { UNSAFE | RESTRICTED | SAFE }\n"
					  "    COST %s\n"
					  "    ROWS %s\n"
					  "    SET %s { TO | = } { %s | DEFAULT }\n"
					  "    SET %s FROM CURRENT\n"
					  "    RESET %s\n"
					  "    RESET ALL",
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("action"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("new_name"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("new_owner"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("new_schema"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("extension_name"),
					  _("where action is one of:"),
					  _("execution_cost"),
					  _("result_rows"),
					  _("configuration_parameter"),
					  _("value"),
					  _("configuration_parameter"),
					  _("configuration_parameter"));
}

static void
sql_help_ALTER_RULE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER RULE %s ON %s RENAME TO %s",
					  _("name"),
					  _("table_name"),
					  _("new_name"));
}

static void
sql_help_ALTER_SCHEMA(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER SCHEMA %s RENAME TO %s\n"
					  "ALTER SCHEMA %s OWNER TO { %s | CURRENT_USER | SESSION_USER }",
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_owner"));
}

static void
sql_help_ALTER_SEQUENCE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER SEQUENCE [ IF EXISTS ] %s\n"
					  "    [ AS %s ]\n"
					  "    [ INCREMENT [ BY ] %s ]\n"
					  "    [ MINVALUE %s | NO MINVALUE ] [ MAXVALUE %s | NO MAXVALUE ]\n"
					  "    [ START [ WITH ] %s ]\n"
					  "    [ RESTART [ [ WITH ] %s ] ]\n"
					  "    [ CACHE %s ] [ [ NO ] CYCLE ]\n"
					  "    [ OWNED BY { %s.%s | NONE } ]\n"
					  "ALTER SEQUENCE [ IF EXISTS ] %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER SEQUENCE [ IF EXISTS ] %s RENAME TO %s\n"
					  "ALTER SEQUENCE [ IF EXISTS ] %s SET SCHEMA %s",
					  _("name"),
					  _("data_type"),
					  _("increment"),
					  _("minvalue"),
					  _("maxvalue"),
					  _("start"),
					  _("restart"),
					  _("cache"),
					  _("table_name"),
					  _("column_name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"));
}

static void
sql_help_ALTER_SERVER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER SERVER %s [ VERSION '%s' ]\n"
					  "    [ OPTIONS ( [ ADD | SET | DROP ] %s ['%s'] [, ... ] ) ]\n"
					  "ALTER SERVER %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER SERVER %s RENAME TO %s",
					  _("name"),
					  _("new_version"),
					  _("option"),
					  _("value"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_name"));
}

static void
sql_help_ALTER_STATISTICS(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER STATISTICS %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER STATISTICS %s RENAME TO %s\n"
					  "ALTER STATISTICS %s SET SCHEMA %s",
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"));
}

static void
sql_help_ALTER_SUBSCRIPTION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER SUBSCRIPTION %s CONNECTION '%s'\n"
					  "ALTER SUBSCRIPTION %s SET PUBLICATION %s [, ...] [ WITH ( %s [= %s] [, ... ] ) ]\n"
					  "ALTER SUBSCRIPTION %s REFRESH PUBLICATION [ WITH ( %s [= %s] [, ... ] ) ]\n"
					  "ALTER SUBSCRIPTION %s ENABLE\n"
					  "ALTER SUBSCRIPTION %s DISABLE\n"
					  "ALTER SUBSCRIPTION %s SET ( %s [= %s] [, ... ] )\n"
					  "ALTER SUBSCRIPTION %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER SUBSCRIPTION %s RENAME TO %s",
					  _("name"),
					  _("conninfo"),
					  _("name"),
					  _("publication_name"),
					  _("set_publication_option"),
					  _("value"),
					  _("name"),
					  _("refresh_option"),
					  _("value"),
					  _("name"),
					  _("name"),
					  _("name"),
					  _("subscription_parameter"),
					  _("value"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_name"));
}

static void
sql_help_ALTER_SYSTEM(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER SYSTEM SET %s { TO | = } { %s | '%s' | DEFAULT }\n"
					  "\n"
					  "ALTER SYSTEM RESET %s\n"
					  "ALTER SYSTEM RESET ALL",
					  _("configuration_parameter"),
					  _("value"),
					  _("value"),
					  _("configuration_parameter"));
}

static void
sql_help_ALTER_TABLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER TABLE [ IF EXISTS ] [ ONLY ] %s [ * ]\n"
					  "    %s [, ... ]\n"
					  "ALTER TABLE [ IF EXISTS ] [ ONLY ] %s [ * ]\n"
					  "    RENAME [ COLUMN ] %s TO %s\n"
					  "ALTER TABLE [ IF EXISTS ] [ ONLY ] %s [ * ]\n"
					  "    RENAME CONSTRAINT %s TO %s\n"
					  "ALTER TABLE [ IF EXISTS ] %s\n"
					  "    RENAME TO %s\n"
					  "ALTER TABLE [ IF EXISTS ] %s\n"
					  "    SET SCHEMA %s\n"
					  "ALTER TABLE ALL IN TABLESPACE %s [ OWNED BY %s [, ... ] ]\n"
					  "    SET TABLESPACE %s [ NOWAIT ]\n"
					  "ALTER TABLE [ IF EXISTS ] %s\n"
					  "    ATTACH PARTITION %s { FOR VALUES %s | DEFAULT }\n"
					  "ALTER TABLE [ IF EXISTS ] %s\n"
					  "    DETACH PARTITION %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ADD [ COLUMN ] [ IF NOT EXISTS ] %s %s [ COLLATE %s ] [ %s [ ... ] ]\n"
					  "    DROP [ COLUMN ] [ IF EXISTS ] %s [ RESTRICT | CASCADE ]\n"
					  "    ALTER [ COLUMN ] %s [ SET DATA ] TYPE %s [ COLLATE %s ] [ USING %s ]\n"
					  "    ALTER [ COLUMN ] %s SET DEFAULT %s\n"
					  "    ALTER [ COLUMN ] %s DROP DEFAULT\n"
					  "    ALTER [ COLUMN ] %s { SET | DROP } NOT NULL\n"
					  "    ALTER [ COLUMN ] %s ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( %s ) ]\n"
					  "    ALTER [ COLUMN ] %s { SET GENERATED { ALWAYS | BY DEFAULT } | SET %s | RESTART [ [ WITH ] %s ] } [...]\n"
					  "    ALTER [ COLUMN ] %s DROP IDENTITY [ IF EXISTS ]\n"
					  "    ALTER [ COLUMN ] %s SET STATISTICS %s\n"
					  "    ALTER [ COLUMN ] %s SET ( %s = %s [, ... ] )\n"
					  "    ALTER [ COLUMN ] %s RESET ( %s [, ... ] )\n"
					  "    ALTER [ COLUMN ] %s SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }\n"
					  "    ADD %s [ NOT VALID ]\n"
					  "    ADD %s\n"
					  "    ALTER CONSTRAINT %s [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]\n"
					  "    VALIDATE CONSTRAINT %s\n"
					  "    DROP CONSTRAINT [ IF EXISTS ]  %s [ RESTRICT | CASCADE ]\n"
					  "    DISABLE TRIGGER [ %s | ALL | USER ]\n"
					  "    ENABLE TRIGGER [ %s | ALL | USER ]\n"
					  "    ENABLE REPLICA TRIGGER %s\n"
					  "    ENABLE ALWAYS TRIGGER %s\n"
					  "    DISABLE RULE %s\n"
					  "    ENABLE RULE %s\n"
					  "    ENABLE REPLICA RULE %s\n"
					  "    ENABLE ALWAYS RULE %s\n"
					  "    DISABLE ROW LEVEL SECURITY\n"
					  "    ENABLE ROW LEVEL SECURITY\n"
					  "    FORCE ROW LEVEL SECURITY\n"
					  "    NO FORCE ROW LEVEL SECURITY\n"
					  "    CLUSTER ON %s\n"
					  "    SET WITHOUT CLUSTER\n"
					  "    SET WITH OIDS\n"
					  "    SET WITHOUT OIDS\n"
					  "    SET TABLESPACE %s\n"
					  "    SET { LOGGED | UNLOGGED }\n"
					  "    SET ( %s = %s [, ... ] )\n"
					  "    RESET ( %s [, ... ] )\n"
					  "    INHERIT %s\n"
					  "    NO INHERIT %s\n"
					  "    OF %s\n"
					  "    NOT OF\n"
					  "    OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "    REPLICA IDENTITY { DEFAULT | USING INDEX %s | FULL | NOTHING }\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "IN ( { %s | %s | TRUE | FALSE | NULL } [, ...] ) |\n"
					  "FROM ( { %s | %s | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] )\n"
					  "  TO ( { %s | %s | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] ) |\n"
					  "WITH ( MODULUS %s, REMAINDER %s )\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "[ CONSTRAINT %s ]\n"
					  "{ NOT NULL |\n"
					  "  NULL |\n"
					  "  CHECK ( %s ) [ NO INHERIT ] |\n"
					  "  DEFAULT %s |\n"
					  "  GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( %s ) ] |\n"
					  "  UNIQUE %s |\n"
					  "  PRIMARY KEY %s |\n"
					  "  REFERENCES %s [ ( %s ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]\n"
					  "    [ ON DELETE %s ] [ ON UPDATE %s ] }\n"
					  "[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "[ CONSTRAINT %s ]\n"
					  "{ CHECK ( %s ) [ NO INHERIT ] |\n"
					  "  UNIQUE ( %s [, ... ] ) %s |\n"
					  "  PRIMARY KEY ( %s [, ... ] ) %s |\n"
					  "  EXCLUDE [ USING %s ] ( %s WITH %s [, ... ] ) %s [ WHERE ( %s ) ] |\n"
					  "  FOREIGN KEY ( %s [, ... ] ) REFERENCES %s [ ( %s [, ... ] ) ]\n"
					  "    [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE %s ] [ ON UPDATE %s ] }\n"
					  "[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    [ CONSTRAINT %s ]\n"
					  "    { UNIQUE | PRIMARY KEY } USING INDEX %s\n"
					  "    [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "[ INCLUDE ( %s [, ... ] ) ]\n"
					  "[ WITH ( %s [= %s] [, ... ] ) ]\n"
					  "[ USING INDEX TABLESPACE %s ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "{ %s | ( %s ) } [ %s ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ]",
					  _("name"),
					  _("action"),
					  _("name"),
					  _("column_name"),
					  _("new_column_name"),
					  _("name"),
					  _("constraint_name"),
					  _("new_constraint_name"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"),
					  _("name"),
					  _("role_name"),
					  _("new_tablespace"),
					  _("name"),
					  _("partition_name"),
					  _("partition_bound_spec"),
					  _("name"),
					  _("partition_name"),
					  _("where action is one of:"),
					  _("column_name"),
					  _("data_type"),
					  _("collation"),
					  _("column_constraint"),
					  _("column_name"),
					  _("column_name"),
					  _("data_type"),
					  _("collation"),
					  _("expression"),
					  _("column_name"),
					  _("expression"),
					  _("column_name"),
					  _("column_name"),
					  _("column_name"),
					  _("sequence_options"),
					  _("column_name"),
					  _("sequence_option"),
					  _("restart"),
					  _("column_name"),
					  _("column_name"),
					  _("integer"),
					  _("column_name"),
					  _("attribute_option"),
					  _("value"),
					  _("column_name"),
					  _("attribute_option"),
					  _("column_name"),
					  _("table_constraint"),
					  _("table_constraint_using_index"),
					  _("constraint_name"),
					  _("constraint_name"),
					  _("constraint_name"),
					  _("trigger_name"),
					  _("trigger_name"),
					  _("trigger_name"),
					  _("trigger_name"),
					  _("rewrite_rule_name"),
					  _("rewrite_rule_name"),
					  _("rewrite_rule_name"),
					  _("rewrite_rule_name"),
					  _("index_name"),
					  _("new_tablespace"),
					  _("storage_parameter"),
					  _("value"),
					  _("storage_parameter"),
					  _("parent_table"),
					  _("parent_table"),
					  _("type_name"),
					  _("new_owner"),
					  _("index_name"),
					  _("and partition_bound_spec is:"),
					  _("numeric_literal"),
					  _("string_literal"),
					  _("numeric_literal"),
					  _("string_literal"),
					  _("numeric_literal"),
					  _("string_literal"),
					  _("numeric_literal"),
					  _("numeric_literal"),
					  _("and column_constraint is:"),
					  _("constraint_name"),
					  _("expression"),
					  _("default_expr"),
					  _("sequence_options"),
					  _("index_parameters"),
					  _("index_parameters"),
					  _("reftable"),
					  _("refcolumn"),
					  _("action"),
					  _("action"),
					  _("and table_constraint is:"),
					  _("constraint_name"),
					  _("expression"),
					  _("column_name"),
					  _("index_parameters"),
					  _("column_name"),
					  _("index_parameters"),
					  _("index_method"),
					  _("exclude_element"),
					  _("operator"),
					  _("index_parameters"),
					  _("predicate"),
					  _("column_name"),
					  _("reftable"),
					  _("refcolumn"),
					  _("action"),
					  _("action"),
					  _("and table_constraint_using_index is:"),
					  _("constraint_name"),
					  _("index_name"),
					  _("index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:"),
					  _("column_name"),
					  _("storage_parameter"),
					  _("value"),
					  _("tablespace_name"),
					  _("exclude_element in an EXCLUDE constraint is:"),
					  _("column_name"),
					  _("expression"),
					  _("opclass"));
}

static void
sql_help_ALTER_TABLESPACE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER TABLESPACE %s RENAME TO %s\n"
					  "ALTER TABLESPACE %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER TABLESPACE %s SET ( %s = %s [, ... ] )\n"
					  "ALTER TABLESPACE %s RESET ( %s [, ... ] )",
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("tablespace_option"),
					  _("value"),
					  _("name"),
					  _("tablespace_option"));
}

static void
sql_help_ALTER_TEXT_SEARCH_CONFIGURATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER TEXT SEARCH CONFIGURATION %s\n"
					  "    ADD MAPPING FOR %s [, ... ] WITH %s [, ... ]\n"
					  "ALTER TEXT SEARCH CONFIGURATION %s\n"
					  "    ALTER MAPPING FOR %s [, ... ] WITH %s [, ... ]\n"
					  "ALTER TEXT SEARCH CONFIGURATION %s\n"
					  "    ALTER MAPPING REPLACE %s WITH %s\n"
					  "ALTER TEXT SEARCH CONFIGURATION %s\n"
					  "    ALTER MAPPING FOR %s [, ... ] REPLACE %s WITH %s\n"
					  "ALTER TEXT SEARCH CONFIGURATION %s\n"
					  "    DROP MAPPING [ IF EXISTS ] FOR %s [, ... ]\n"
					  "ALTER TEXT SEARCH CONFIGURATION %s RENAME TO %s\n"
					  "ALTER TEXT SEARCH CONFIGURATION %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER TEXT SEARCH CONFIGURATION %s SET SCHEMA %s",
					  _("name"),
					  _("token_type"),
					  _("dictionary_name"),
					  _("name"),
					  _("token_type"),
					  _("dictionary_name"),
					  _("name"),
					  _("old_dictionary"),
					  _("new_dictionary"),
					  _("name"),
					  _("token_type"),
					  _("old_dictionary"),
					  _("new_dictionary"),
					  _("name"),
					  _("token_type"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_schema"));
}

static void
sql_help_ALTER_TEXT_SEARCH_DICTIONARY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER TEXT SEARCH DICTIONARY %s (\n"
					  "    %s [ = %s ] [, ... ]\n"
					  ")\n"
					  "ALTER TEXT SEARCH DICTIONARY %s RENAME TO %s\n"
					  "ALTER TEXT SEARCH DICTIONARY %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER TEXT SEARCH DICTIONARY %s SET SCHEMA %s",
					  _("name"),
					  _("option"),
					  _("value"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_schema"));
}

static void
sql_help_ALTER_TEXT_SEARCH_PARSER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER TEXT SEARCH PARSER %s RENAME TO %s\n"
					  "ALTER TEXT SEARCH PARSER %s SET SCHEMA %s",
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"));
}

static void
sql_help_ALTER_TEXT_SEARCH_TEMPLATE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER TEXT SEARCH TEMPLATE %s RENAME TO %s\n"
					  "ALTER TEXT SEARCH TEMPLATE %s SET SCHEMA %s",
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"));
}

static void
sql_help_ALTER_TRIGGER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER TRIGGER %s ON %s RENAME TO %s\n"
					  "ALTER TRIGGER %s ON %s DEPENDS ON EXTENSION %s",
					  _("name"),
					  _("table_name"),
					  _("new_name"),
					  _("name"),
					  _("table_name"),
					  _("extension_name"));
}

static void
sql_help_ALTER_TYPE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER TYPE %s %s [, ... ]\n"
					  "ALTER TYPE %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER TYPE %s RENAME ATTRIBUTE %s TO %s [ CASCADE | RESTRICT ]\n"
					  "ALTER TYPE %s RENAME TO %s\n"
					  "ALTER TYPE %s SET SCHEMA %s\n"
					  "ALTER TYPE %s ADD VALUE [ IF NOT EXISTS ] %s [ { BEFORE | AFTER } %s ]\n"
					  "ALTER TYPE %s RENAME VALUE %s TO %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ADD ATTRIBUTE %s %s [ COLLATE %s ] [ CASCADE | RESTRICT ]\n"
					  "    DROP ATTRIBUTE [ IF EXISTS ] %s [ CASCADE | RESTRICT ]\n"
					  "    ALTER ATTRIBUTE %s [ SET DATA ] TYPE %s [ COLLATE %s ] [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("action"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("attribute_name"),
					  _("new_attribute_name"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"),
					  _("name"),
					  _("new_enum_value"),
					  _("neighbor_enum_value"),
					  _("name"),
					  _("existing_enum_value"),
					  _("new_enum_value"),
					  _("where action is one of:"),
					  _("attribute_name"),
					  _("data_type"),
					  _("collation"),
					  _("attribute_name"),
					  _("attribute_name"),
					  _("data_type"),
					  _("collation"));
}

static void
sql_help_ALTER_USER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER USER %s [ WITH ] %s [ ... ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "      SUPERUSER | NOSUPERUSER\n"
					  "    | CREATEDB | NOCREATEDB\n"
					  "    | CREATEROLE | NOCREATEROLE\n"
					  "    | INHERIT | NOINHERIT\n"
					  "    | LOGIN | NOLOGIN\n"
					  "    | REPLICATION | NOREPLICATION\n"
					  "    | BYPASSRLS | NOBYPASSRLS\n"
					  "    | CONNECTION LIMIT %s\n"
					  "    | [ ENCRYPTED ] PASSWORD '%s' | PASSWORD NULL\n"
					  "    | VALID UNTIL '%s'\n"
					  "\n"
					  "ALTER USER %s RENAME TO %s\n"
					  "\n"
					  "ALTER USER { %s | ALL } [ IN DATABASE %s ] SET %s { TO | = } { %s | DEFAULT }\n"
					  "ALTER USER { %s | ALL } [ IN DATABASE %s ] SET %s FROM CURRENT\n"
					  "ALTER USER { %s | ALL } [ IN DATABASE %s ] RESET %s\n"
					  "ALTER USER { %s | ALL } [ IN DATABASE %s ] RESET ALL\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    %s\n"
					  "  | CURRENT_USER\n"
					  "  | SESSION_USER",
					  _("role_specification"),
					  _("option"),
					  _("where option can be:"),
					  _("connlimit"),
					  _("password"),
					  _("timestamp"),
					  _("name"),
					  _("new_name"),
					  _("role_specification"),
					  _("database_name"),
					  _("configuration_parameter"),
					  _("value"),
					  _("role_specification"),
					  _("database_name"),
					  _("configuration_parameter"),
					  _("role_specification"),
					  _("database_name"),
					  _("configuration_parameter"),
					  _("role_specification"),
					  _("database_name"),
					  _("where role_specification can be:"),
					  _("role_name"));
}

static void
sql_help_ALTER_USER_MAPPING(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER USER MAPPING FOR { %s | USER | CURRENT_USER | SESSION_USER | PUBLIC }\n"
					  "    SERVER %s\n"
					  "    OPTIONS ( [ ADD | SET | DROP ] %s ['%s'] [, ... ] )",
					  _("user_name"),
					  _("server_name"),
					  _("option"),
					  _("value"));
}

static void
sql_help_ALTER_VIEW(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ALTER VIEW [ IF EXISTS ] %s ALTER [ COLUMN ] %s SET DEFAULT %s\n"
					  "ALTER VIEW [ IF EXISTS ] %s ALTER [ COLUMN ] %s DROP DEFAULT\n"
					  "ALTER VIEW [ IF EXISTS ] %s OWNER TO { %s | CURRENT_USER | SESSION_USER }\n"
					  "ALTER VIEW [ IF EXISTS ] %s RENAME TO %s\n"
					  "ALTER VIEW [ IF EXISTS ] %s SET SCHEMA %s\n"
					  "ALTER VIEW [ IF EXISTS ] %s SET ( %s [= %s] [, ... ] )\n"
					  "ALTER VIEW [ IF EXISTS ] %s RESET ( %s [, ... ] )",
					  _("name"),
					  _("column_name"),
					  _("expression"),
					  _("name"),
					  _("column_name"),
					  _("name"),
					  _("new_owner"),
					  _("name"),
					  _("new_name"),
					  _("name"),
					  _("new_schema"),
					  _("name"),
					  _("view_option_name"),
					  _("view_option_value"),
					  _("name"),
					  _("view_option_name"));
}

static void
sql_help_ANALYZE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ANALYZE [ ( %s [, ...] ) ] [ %s [, ...] ]\n"
					  "ANALYZE [ VERBOSE ] [ %s [, ...] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    VERBOSE\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    %s [ ( %s [, ...] ) ]",
					  _("option"),
					  _("table_and_columns"),
					  _("table_and_columns"),
					  _("where option can be one of:"),
					  _("and table_and_columns is:"),
					  _("table_name"),
					  _("column_name"));
}

static void
sql_help_BEGIN(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "BEGIN [ WORK | TRANSACTION ] [ %s [, ...] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }\n"
					  "    READ WRITE | READ ONLY\n"
					  "    [ NOT ] DEFERRABLE",
					  _("transaction_mode"),
					  _("where transaction_mode is one of:"));
}

static void
sql_help_CALL(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CALL %s ( [ %s ] [, ...] )",
					  _("name"),
					  _("argument"));
}

static void
sql_help_CHECKPOINT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CHECKPOINT");
}

static void
sql_help_CLOSE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CLOSE { %s | ALL }",
					  _("name"));
}

static void
sql_help_CLUSTER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CLUSTER [VERBOSE] %s [ USING %s ]\n"
					  "CLUSTER [VERBOSE]",
					  _("table_name"),
					  _("index_name"));
}

static void
sql_help_COMMENT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "COMMENT ON\n"
					  "{\n"
					  "  ACCESS METHOD %s |\n"
					  "  AGGREGATE %s ( %s ) |\n"
					  "  CAST (%s AS %s) |\n"
					  "  COLLATION %s |\n"
					  "  COLUMN %s.%s |\n"
					  "  CONSTRAINT %s ON %s |\n"
					  "  CONSTRAINT %s ON DOMAIN %s |\n"
					  "  CONVERSION %s |\n"
					  "  DATABASE %s |\n"
					  "  DOMAIN %s |\n"
					  "  EXTENSION %s |\n"
					  "  EVENT TRIGGER %s |\n"
					  "  FOREIGN DATA WRAPPER %s |\n"
					  "  FOREIGN TABLE %s |\n"
					  "  FUNCTION %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] |\n"
					  "  INDEX %s |\n"
					  "  LARGE OBJECT %s |\n"
					  "  MATERIALIZED VIEW %s |\n"
					  "  OPERATOR %s (%s, %s) |\n"
					  "  OPERATOR CLASS %s USING %s |\n"
					  "  OPERATOR FAMILY %s USING %s |\n"
					  "  POLICY %s ON %s |\n"
					  "  [ PROCEDURAL ] LANGUAGE %s |\n"
					  "  PROCEDURE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] |\n"
					  "  PUBLICATION %s |\n"
					  "  ROLE %s |\n"
					  "  ROUTINE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] |\n"
					  "  RULE %s ON %s |\n"
					  "  SCHEMA %s |\n"
					  "  SEQUENCE %s |\n"
					  "  SERVER %s |\n"
					  "  STATISTICS %s |\n"
					  "  SUBSCRIPTION %s |\n"
					  "  TABLE %s |\n"
					  "  TABLESPACE %s |\n"
					  "  TEXT SEARCH CONFIGURATION %s |\n"
					  "  TEXT SEARCH DICTIONARY %s |\n"
					  "  TEXT SEARCH PARSER %s |\n"
					  "  TEXT SEARCH TEMPLATE %s |\n"
					  "  TRANSFORM FOR %s LANGUAGE %s |\n"
					  "  TRIGGER %s ON %s |\n"
					  "  TYPE %s |\n"
					  "  VIEW %s\n"
					  "} IS '%s'\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "* |\n"
					  "[ %s ] [ %s ] %s [ , ... ] |\n"
					  "[ [ %s ] [ %s ] %s [ , ... ] ] ORDER BY [ %s ] [ %s ] %s [ , ... ]",
					  _("object_name"),
					  _("aggregate_name"),
					  _("aggregate_signature"),
					  _("source_type"),
					  _("target_type"),
					  _("object_name"),
					  _("relation_name"),
					  _("column_name"),
					  _("constraint_name"),
					  _("table_name"),
					  _("constraint_name"),
					  _("domain_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("function_name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("object_name"),
					  _("large_object_oid"),
					  _("object_name"),
					  _("operator_name"),
					  _("left_type"),
					  _("right_type"),
					  _("object_name"),
					  _("index_method"),
					  _("object_name"),
					  _("index_method"),
					  _("policy_name"),
					  _("table_name"),
					  _("object_name"),
					  _("procedure_name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("object_name"),
					  _("object_name"),
					  _("routine_name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("rule_name"),
					  _("table_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("type_name"),
					  _("lang_name"),
					  _("trigger_name"),
					  _("table_name"),
					  _("object_name"),
					  _("object_name"),
					  _("text"),
					  _("where aggregate_signature is:"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"));
}

static void
sql_help_COMMIT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "COMMIT [ WORK | TRANSACTION ]");
}

static void
sql_help_COMMIT_PREPARED(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "COMMIT PREPARED %s",
					  _("transaction_id"));
}

static void
sql_help_COPY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "COPY %s [ ( %s [, ...] ) ]\n"
					  "    FROM { '%s' | PROGRAM '%s' | STDIN }\n"
					  "    [ [ WITH ] ( %s [, ...] ) ]\n"
					  "\n"
					  "COPY { %s [ ( %s [, ...] ) ] | ( %s ) }\n"
					  "    TO { '%s' | PROGRAM '%s' | STDOUT }\n"
					  "    [ [ WITH ] ( %s [, ...] ) ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    FORMAT %s\n"
					  "    OIDS [ %s ]\n"
					  "    FREEZE [ %s ]\n"
					  "    DELIMITER '%s'\n"
					  "    NULL '%s'\n"
					  "    HEADER [ %s ]\n"
					  "    QUOTE '%s'\n"
					  "    ESCAPE '%s'\n"
					  "    FORCE_QUOTE { ( %s [, ...] ) | * }\n"
					  "    FORCE_NOT_NULL ( %s [, ...] )\n"
					  "    FORCE_NULL ( %s [, ...] )\n"
					  "    ENCODING '%s'",
					  _("table_name"),
					  _("column_name"),
					  _("filename"),
					  _("command"),
					  _("option"),
					  _("table_name"),
					  _("column_name"),
					  _("query"),
					  _("filename"),
					  _("command"),
					  _("option"),
					  _("where option can be one of:"),
					  _("format_name"),
					  _("boolean"),
					  _("boolean"),
					  _("delimiter_character"),
					  _("null_string"),
					  _("boolean"),
					  _("quote_character"),
					  _("escape_character"),
					  _("column_name"),
					  _("column_name"),
					  _("column_name"),
					  _("encoding_name"));
}

static void
sql_help_CREATE_ACCESS_METHOD(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE ACCESS METHOD %s\n"
					  "    TYPE %s\n"
					  "    HANDLER %s",
					  _("name"),
					  _("access_method_type"),
					  _("handler_function"));
}

static void
sql_help_CREATE_AGGREGATE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE AGGREGATE %s ( [ %s ] [ %s ] %s [ , ... ] ) (\n"
					  "    SFUNC = %s,\n"
					  "    STYPE = %s\n"
					  "    [ , SSPACE = %s ]\n"
					  "    [ , FINALFUNC = %s ]\n"
					  "    [ , FINALFUNC_EXTRA ]\n"
					  "    [ , FINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ]\n"
					  "    [ , COMBINEFUNC = %s ]\n"
					  "    [ , SERIALFUNC = %s ]\n"
					  "    [ , DESERIALFUNC = %s ]\n"
					  "    [ , INITCOND = %s ]\n"
					  "    [ , MSFUNC = %s ]\n"
					  "    [ , MINVFUNC = %s ]\n"
					  "    [ , MSTYPE = %s ]\n"
					  "    [ , MSSPACE = %s ]\n"
					  "    [ , MFINALFUNC = %s ]\n"
					  "    [ , MFINALFUNC_EXTRA ]\n"
					  "    [ , MFINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ]\n"
					  "    [ , MINITCOND = %s ]\n"
					  "    [ , SORTOP = %s ]\n"
					  "    [ , PARALLEL = { SAFE | RESTRICTED | UNSAFE } ]\n"
					  ")\n"
					  "\n"
					  "CREATE AGGREGATE %s ( [ [ %s ] [ %s ] %s [ , ... ] ]\n"
					  "                        ORDER BY [ %s ] [ %s ] %s [ , ... ] ) (\n"
					  "    SFUNC = %s,\n"
					  "    STYPE = %s\n"
					  "    [ , SSPACE = %s ]\n"
					  "    [ , FINALFUNC = %s ]\n"
					  "    [ , FINALFUNC_EXTRA ]\n"
					  "    [ , FINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ]\n"
					  "    [ , INITCOND = %s ]\n"
					  "    [ , PARALLEL = { SAFE | RESTRICTED | UNSAFE } ]\n"
					  "    [ , HYPOTHETICAL ]\n"
					  ")\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "CREATE AGGREGATE %s (\n"
					  "    BASETYPE = %s,\n"
					  "    SFUNC = %s,\n"
					  "    STYPE = %s\n"
					  "    [ , SSPACE = %s ]\n"
					  "    [ , FINALFUNC = %s ]\n"
					  "    [ , FINALFUNC_EXTRA ]\n"
					  "    [ , FINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ]\n"
					  "    [ , COMBINEFUNC = %s ]\n"
					  "    [ , SERIALFUNC = %s ]\n"
					  "    [ , DESERIALFUNC = %s ]\n"
					  "    [ , INITCOND = %s ]\n"
					  "    [ , MSFUNC = %s ]\n"
					  "    [ , MINVFUNC = %s ]\n"
					  "    [ , MSTYPE = %s ]\n"
					  "    [ , MSSPACE = %s ]\n"
					  "    [ , MFINALFUNC = %s ]\n"
					  "    [ , MFINALFUNC_EXTRA ]\n"
					  "    [ , MFINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ]\n"
					  "    [ , MINITCOND = %s ]\n"
					  "    [ , SORTOP = %s ]\n"
					  ")",
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("arg_data_type"),
					  _("sfunc"),
					  _("state_data_type"),
					  _("state_data_size"),
					  _("ffunc"),
					  _("combinefunc"),
					  _("serialfunc"),
					  _("deserialfunc"),
					  _("initial_condition"),
					  _("msfunc"),
					  _("minvfunc"),
					  _("mstate_data_type"),
					  _("mstate_data_size"),
					  _("mffunc"),
					  _("minitial_condition"),
					  _("sort_operator"),
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("arg_data_type"),
					  _("argmode"),
					  _("argname"),
					  _("arg_data_type"),
					  _("sfunc"),
					  _("state_data_type"),
					  _("state_data_size"),
					  _("ffunc"),
					  _("initial_condition"),
					  _("or the old syntax"),
					  _("name"),
					  _("base_type"),
					  _("sfunc"),
					  _("state_data_type"),
					  _("state_data_size"),
					  _("ffunc"),
					  _("combinefunc"),
					  _("serialfunc"),
					  _("deserialfunc"),
					  _("initial_condition"),
					  _("msfunc"),
					  _("minvfunc"),
					  _("mstate_data_type"),
					  _("mstate_data_size"),
					  _("mffunc"),
					  _("minitial_condition"),
					  _("sort_operator"));
}

static void
sql_help_CREATE_CAST(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE CAST (%s AS %s)\n"
					  "    WITH FUNCTION %s [ (%s [, ...]) ]\n"
					  "    [ AS ASSIGNMENT | AS IMPLICIT ]\n"
					  "\n"
					  "CREATE CAST (%s AS %s)\n"
					  "    WITHOUT FUNCTION\n"
					  "    [ AS ASSIGNMENT | AS IMPLICIT ]\n"
					  "\n"
					  "CREATE CAST (%s AS %s)\n"
					  "    WITH INOUT\n"
					  "    [ AS ASSIGNMENT | AS IMPLICIT ]",
					  _("source_type"),
					  _("target_type"),
					  _("function_name"),
					  _("argument_type"),
					  _("source_type"),
					  _("target_type"),
					  _("source_type"),
					  _("target_type"));
}

static void
sql_help_CREATE_COLLATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE COLLATION [ IF NOT EXISTS ] %s (\n"
					  "    [ LOCALE = %s, ]\n"
					  "    [ LC_COLLATE = %s, ]\n"
					  "    [ LC_CTYPE = %s, ]\n"
					  "    [ PROVIDER = %s, ]\n"
					  "    [ VERSION = %s ]\n"
					  ")\n"
					  "CREATE COLLATION [ IF NOT EXISTS ] %s FROM %s",
					  _("name"),
					  _("locale"),
					  _("lc_collate"),
					  _("lc_ctype"),
					  _("provider"),
					  _("version"),
					  _("name"),
					  _("existing_collation"));
}

static void
sql_help_CREATE_CONVERSION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ DEFAULT ] CONVERSION %s\n"
					  "    FOR %s TO %s FROM %s",
					  _("name"),
					  _("source_encoding"),
					  _("dest_encoding"),
					  _("function_name"));
}

static void
sql_help_CREATE_DATABASE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE DATABASE %s\n"
					  "    [ [ WITH ] [ OWNER [=] %s ]\n"
					  "           [ TEMPLATE [=] %s ]\n"
					  "           [ ENCODING [=] %s ]\n"
					  "           [ LC_COLLATE [=] %s ]\n"
					  "           [ LC_CTYPE [=] %s ]\n"
					  "           [ TABLESPACE [=] %s ]\n"
					  "           [ ALLOW_CONNECTIONS [=] %s ]\n"
					  "           [ CONNECTION LIMIT [=] %s ]\n"
					  "           [ IS_TEMPLATE [=] %s ] ]",
					  _("name"),
					  _("user_name"),
					  _("template"),
					  _("encoding"),
					  _("lc_collate"),
					  _("lc_ctype"),
					  _("tablespace_name"),
					  _("allowconn"),
					  _("connlimit"),
					  _("istemplate"));
}

static void
sql_help_CREATE_DOMAIN(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE DOMAIN %s [ AS ] %s\n"
					  "    [ COLLATE %s ]\n"
					  "    [ DEFAULT %s ]\n"
					  "    [ %s [ ... ] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "[ CONSTRAINT %s ]\n"
					  "{ NOT NULL | NULL | CHECK (%s) }",
					  _("name"),
					  _("data_type"),
					  _("collation"),
					  _("expression"),
					  _("constraint"),
					  _("where constraint is:"),
					  _("constraint_name"),
					  _("expression"));
}

static void
sql_help_CREATE_EVENT_TRIGGER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE EVENT TRIGGER %s\n"
					  "    ON %s\n"
					  "    [ WHEN %s IN (filter_value [, ... ]) [ AND ... ] ]\n"
					  "    EXECUTE { FUNCTION | PROCEDURE } %s()",
					  _("name"),
					  _("event"),
					  _("filter_variable"),
					  _("function_name"));
}

static void
sql_help_CREATE_EXTENSION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE EXTENSION [ IF NOT EXISTS ] %s\n"
					  "    [ WITH ] [ SCHEMA %s ]\n"
					  "             [ VERSION %s ]\n"
					  "             [ FROM %s ]\n"
					  "             [ CASCADE ]",
					  _("extension_name"),
					  _("schema_name"),
					  _("version"),
					  _("old_version"));
}

static void
sql_help_CREATE_FOREIGN_DATA_WRAPPER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE FOREIGN DATA WRAPPER %s\n"
					  "    [ HANDLER %s | NO HANDLER ]\n"
					  "    [ VALIDATOR %s | NO VALIDATOR ]\n"
					  "    [ OPTIONS ( %s '%s' [, ... ] ) ]",
					  _("name"),
					  _("handler_function"),
					  _("validator_function"),
					  _("option"),
					  _("value"));
}

static void
sql_help_CREATE_FOREIGN_TABLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE FOREIGN TABLE [ IF NOT EXISTS ] %s ( [\n"
					  "  { %s %s [ OPTIONS ( %s '%s' [, ... ] ) ] [ COLLATE %s ] [ %s [ ... ] ]\n"
					  "    | %s }\n"
					  "    [, ... ]\n"
					  "] )\n"
					  "[ INHERITS ( %s [, ... ] ) ]\n"
					  "  SERVER %s\n"
					  "[ OPTIONS ( %s '%s' [, ... ] ) ]\n"
					  "\n"
					  "CREATE FOREIGN TABLE [ IF NOT EXISTS ] %s\n"
					  "  PARTITION OF %s [ (\n"
					  "  { %s [ WITH OPTIONS ] [ %s [ ... ] ]\n"
					  "    | %s }\n"
					  "    [, ... ]\n"
					  ") ] %s\n"
					  "  SERVER %s\n"
					  "[ OPTIONS ( %s '%s' [, ... ] ) ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "[ CONSTRAINT %s ]\n"
					  "{ NOT NULL |\n"
					  "  NULL |\n"
					  "  CHECK ( %s ) [ NO INHERIT ] |\n"
					  "  DEFAULT %s }\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "[ CONSTRAINT %s ]\n"
					  "CHECK ( %s ) [ NO INHERIT ]",
					  _("table_name"),
					  _("column_name"),
					  _("data_type"),
					  _("option"),
					  _("value"),
					  _("collation"),
					  _("column_constraint"),
					  _("table_constraint"),
					  _("parent_table"),
					  _("server_name"),
					  _("option"),
					  _("value"),
					  _("table_name"),
					  _("parent_table"),
					  _("column_name"),
					  _("column_constraint"),
					  _("table_constraint"),
					  _("partition_bound_spec"),
					  _("server_name"),
					  _("option"),
					  _("value"),
					  _("where column_constraint is:"),
					  _("constraint_name"),
					  _("expression"),
					  _("default_expr"),
					  _("and table_constraint is:"),
					  _("constraint_name"),
					  _("expression"));
}

static void
sql_help_CREATE_FUNCTION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ OR REPLACE ] FUNCTION\n"
					  "    %s ( [ [ %s ] [ %s ] %s [ { DEFAULT | = } %s ] [, ...] ] )\n"
					  "    [ RETURNS %s\n"
					  "      | RETURNS TABLE ( %s %s [, ...] ) ]\n"
					  "  { LANGUAGE %s\n"
					  "    | TRANSFORM { FOR TYPE %s } [, ... ]\n"
					  "    | WINDOW\n"
					  "    | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF\n"
					  "    | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT\n"
					  "    | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\n"
					  "    | PARALLEL { UNSAFE | RESTRICTED | SAFE }\n"
					  "    | COST %s\n"
					  "    | ROWS %s\n"
					  "    | SET %s { TO %s | = %s | FROM CURRENT }\n"
					  "    | AS '%s'\n"
					  "    | AS '%s', '%s'\n"
					  "  } ...",
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("default_expr"),
					  _("rettype"),
					  _("column_name"),
					  _("column_type"),
					  _("lang_name"),
					  _("type_name"),
					  _("execution_cost"),
					  _("result_rows"),
					  _("configuration_parameter"),
					  _("value"),
					  _("value"),
					  _("definition"),
					  _("obj_file"),
					  _("link_symbol"));
}

static void
sql_help_CREATE_GROUP(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE GROUP %s [ [ WITH ] %s [ ... ] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "      SUPERUSER | NOSUPERUSER\n"
					  "    | CREATEDB | NOCREATEDB\n"
					  "    | CREATEROLE | NOCREATEROLE\n"
					  "    | INHERIT | NOINHERIT\n"
					  "    | LOGIN | NOLOGIN\n"
					  "    | [ ENCRYPTED ] PASSWORD '%s'\n"
					  "    | VALID UNTIL '%s'\n"
					  "    | IN ROLE %s [, ...]\n"
					  "    | IN GROUP %s [, ...]\n"
					  "    | ROLE %s [, ...]\n"
					  "    | ADMIN %s [, ...]\n"
					  "    | USER %s [, ...]\n"
					  "    | SYSID %s",
					  _("name"),
					  _("option"),
					  _("where option can be:"),
					  _("password"),
					  _("timestamp"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("uid"));
}

static void
sql_help_CREATE_INDEX(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] %s ] ON [ ONLY ] %s [ USING %s ]\n"
					  "    ( { %s | ( %s ) } [ COLLATE %s ] [ %s ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )\n"
					  "    [ INCLUDE ( %s [, ...] ) ]\n"
					  "    [ WITH ( %s = %s [, ... ] ) ]\n"
					  "    [ TABLESPACE %s ]\n"
					  "    [ WHERE %s ]",
					  _("name"),
					  _("table_name"),
					  _("method"),
					  _("column_name"),
					  _("expression"),
					  _("collation"),
					  _("opclass"),
					  _("column_name"),
					  _("storage_parameter"),
					  _("value"),
					  _("tablespace_name"),
					  _("predicate"));
}

static void
sql_help_CREATE_LANGUAGE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ OR REPLACE ] [ PROCEDURAL ] LANGUAGE %s\n"
					  "CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE %s\n"
					  "    HANDLER %s [ INLINE %s ] [ VALIDATOR %s ]",
					  _("name"),
					  _("name"),
					  _("call_handler"),
					  _("inline_handler"),
					  _("valfunction"));
}

static void
sql_help_CREATE_MATERIALIZED_VIEW(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] %s\n"
					  "    [ (%s [, ...] ) ]\n"
					  "    [ WITH ( %s [= %s] [, ... ] ) ]\n"
					  "    [ TABLESPACE %s ]\n"
					  "    AS %s\n"
					  "    [ WITH [ NO ] DATA ]",
					  _("table_name"),
					  _("column_name"),
					  _("storage_parameter"),
					  _("value"),
					  _("tablespace_name"),
					  _("query"));
}

static void
sql_help_CREATE_OPERATOR(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE OPERATOR %s (\n"
					  "    {FUNCTION|PROCEDURE} = %s\n"
					  "    [, LEFTARG = %s ] [, RIGHTARG = %s ]\n"
					  "    [, COMMUTATOR = %s ] [, NEGATOR = %s ]\n"
					  "    [, RESTRICT = %s ] [, JOIN = %s ]\n"
					  "    [, HASHES ] [, MERGES ]\n"
					  ")",
					  _("name"),
					  _("function_name"),
					  _("left_type"),
					  _("right_type"),
					  _("com_op"),
					  _("neg_op"),
					  _("res_proc"),
					  _("join_proc"));
}

static void
sql_help_CREATE_OPERATOR_CLASS(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE OPERATOR CLASS %s [ DEFAULT ] FOR TYPE %s\n"
					  "  USING %s [ FAMILY %s ] AS\n"
					  "  {  OPERATOR %s %s [ ( %s, %s ) ] [ FOR SEARCH | FOR ORDER BY %s ]\n"
					  "   | FUNCTION %s [ ( %s [ , %s ] ) ] %s ( %s [, ...] )\n"
					  "   | STORAGE %s\n"
					  "  } [, ... ]",
					  _("name"),
					  _("data_type"),
					  _("index_method"),
					  _("family_name"),
					  _("strategy_number"),
					  _("operator_name"),
					  _("op_type"),
					  _("op_type"),
					  _("sort_family_name"),
					  _("support_number"),
					  _("op_type"),
					  _("op_type"),
					  _("function_name"),
					  _("argument_type"),
					  _("storage_type"));
}

static void
sql_help_CREATE_OPERATOR_FAMILY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE OPERATOR FAMILY %s USING %s",
					  _("name"),
					  _("index_method"));
}

static void
sql_help_CREATE_POLICY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE POLICY %s ON %s\n"
					  "    [ AS { PERMISSIVE | RESTRICTIVE } ]\n"
					  "    [ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ]\n"
					  "    [ TO { %s | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ]\n"
					  "    [ USING ( %s ) ]\n"
					  "    [ WITH CHECK ( %s ) ]",
					  _("name"),
					  _("table_name"),
					  _("role_name"),
					  _("using_expression"),
					  _("check_expression"));
}

static void
sql_help_CREATE_PROCEDURE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ OR REPLACE ] PROCEDURE\n"
					  "    %s ( [ [ %s ] [ %s ] %s [ { DEFAULT | = } %s ] [, ...] ] )\n"
					  "  { LANGUAGE %s\n"
					  "    | TRANSFORM { FOR TYPE %s } [, ... ]\n"
					  "    | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER\n"
					  "    | SET %s { TO %s | = %s | FROM CURRENT }\n"
					  "    | AS '%s'\n"
					  "    | AS '%s', '%s'\n"
					  "  } ...",
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("default_expr"),
					  _("lang_name"),
					  _("type_name"),
					  _("configuration_parameter"),
					  _("value"),
					  _("value"),
					  _("definition"),
					  _("obj_file"),
					  _("link_symbol"));
}

static void
sql_help_CREATE_PUBLICATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE PUBLICATION %s\n"
					  "    [ FOR TABLE [ ONLY ] %s [ * ] [, ...]\n"
					  "      | FOR ALL TABLES ]\n"
					  "    [ WITH ( %s [= %s] [, ... ] ) ]",
					  _("name"),
					  _("table_name"),
					  _("publication_parameter"),
					  _("value"));
}

static void
sql_help_CREATE_ROLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE ROLE %s [ [ WITH ] %s [ ... ] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "      SUPERUSER | NOSUPERUSER\n"
					  "    | CREATEDB | NOCREATEDB\n"
					  "    | CREATEROLE | NOCREATEROLE\n"
					  "    | INHERIT | NOINHERIT\n"
					  "    | LOGIN | NOLOGIN\n"
					  "    | REPLICATION | NOREPLICATION\n"
					  "    | BYPASSRLS | NOBYPASSRLS\n"
					  "    | CONNECTION LIMIT %s\n"
					  "    | [ ENCRYPTED ] PASSWORD '%s' | PASSWORD NULL\n"
					  "    | VALID UNTIL '%s'\n"
					  "    | IN ROLE %s [, ...]\n"
					  "    | IN GROUP %s [, ...]\n"
					  "    | ROLE %s [, ...]\n"
					  "    | ADMIN %s [, ...]\n"
					  "    | USER %s [, ...]\n"
					  "    | SYSID %s",
					  _("name"),
					  _("option"),
					  _("where option can be:"),
					  _("connlimit"),
					  _("password"),
					  _("timestamp"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("uid"));
}

static void
sql_help_CREATE_RULE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ OR REPLACE ] RULE %s AS ON %s\n"
					  "    TO %s [ WHERE %s ]\n"
					  "    DO [ ALSO | INSTEAD ] { NOTHING | %s | ( %s ; %s ... ) }\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    SELECT | INSERT | UPDATE | DELETE",
					  _("name"),
					  _("event"),
					  _("table_name"),
					  _("condition"),
					  _("command"),
					  _("command"),
					  _("command"),
					  _("where event can be one of:"));
}

static void
sql_help_CREATE_SCHEMA(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE SCHEMA %s [ AUTHORIZATION %s ] [ %s [ ... ] ]\n"
					  "CREATE SCHEMA AUTHORIZATION %s [ %s [ ... ] ]\n"
					  "CREATE SCHEMA IF NOT EXISTS %s [ AUTHORIZATION %s ]\n"
					  "CREATE SCHEMA IF NOT EXISTS AUTHORIZATION %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    %s\n"
					  "  | CURRENT_USER\n"
					  "  | SESSION_USER",
					  _("schema_name"),
					  _("role_specification"),
					  _("schema_element"),
					  _("role_specification"),
					  _("schema_element"),
					  _("schema_name"),
					  _("role_specification"),
					  _("role_specification"),
					  _("where role_specification can be:"),
					  _("user_name"));
}

static void
sql_help_CREATE_SEQUENCE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] %s\n"
					  "    [ AS %s ]\n"
					  "    [ INCREMENT [ BY ] %s ]\n"
					  "    [ MINVALUE %s | NO MINVALUE ] [ MAXVALUE %s | NO MAXVALUE ]\n"
					  "    [ START [ WITH ] %s ] [ CACHE %s ] [ [ NO ] CYCLE ]\n"
					  "    [ OWNED BY { %s.%s | NONE } ]",
					  _("name"),
					  _("data_type"),
					  _("increment"),
					  _("minvalue"),
					  _("maxvalue"),
					  _("start"),
					  _("cache"),
					  _("table_name"),
					  _("column_name"));
}

static void
sql_help_CREATE_SERVER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE SERVER [ IF NOT EXISTS ] %s [ TYPE '%s' ] [ VERSION '%s' ]\n"
					  "    FOREIGN DATA WRAPPER %s\n"
					  "    [ OPTIONS ( %s '%s' [, ... ] ) ]",
					  _("server_name"),
					  _("server_type"),
					  _("server_version"),
					  _("fdw_name"),
					  _("option"),
					  _("value"));
}

static void
sql_help_CREATE_STATISTICS(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE STATISTICS [ IF NOT EXISTS ] %s\n"
					  "    [ ( %s [, ... ] ) ]\n"
					  "    ON %s, %s [, ...]\n"
					  "    FROM %s",
					  _("statistics_name"),
					  _("statistics_kind"),
					  _("column_name"),
					  _("column_name"),
					  _("table_name"));
}

static void
sql_help_CREATE_SUBSCRIPTION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE SUBSCRIPTION %s\n"
					  "    CONNECTION '%s'\n"
					  "    PUBLICATION %s [, ...]\n"
					  "    [ WITH ( %s [= %s] [, ... ] ) ]",
					  _("subscription_name"),
					  _("conninfo"),
					  _("publication_name"),
					  _("subscription_parameter"),
					  _("value"));
}

static void
sql_help_CREATE_TABLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] %s ( [\n"
					  "  { %s %s [ COLLATE %s ] [ %s [ ... ] ]\n"
					  "    | %s\n"
					  "    | LIKE %s [ %s ... ] }\n"
					  "    [, ... ]\n"
					  "] )\n"
					  "[ INHERITS ( %s [, ... ] ) ]\n"
					  "[ PARTITION BY { RANGE | LIST | HASH } ( { %s | ( %s ) } [ COLLATE %s ] [ %s ] [, ... ] ) ]\n"
					  "[ WITH ( %s [= %s] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]\n"
					  "[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]\n"
					  "[ TABLESPACE %s ]\n"
					  "\n"
					  "CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] %s\n"
					  "    OF %s [ (\n"
					  "  { %s [ WITH OPTIONS ] [ %s [ ... ] ]\n"
					  "    | %s }\n"
					  "    [, ... ]\n"
					  ") ]\n"
					  "[ PARTITION BY { RANGE | LIST | HASH } ( { %s | ( %s ) } [ COLLATE %s ] [ %s ] [, ... ] ) ]\n"
					  "[ WITH ( %s [= %s] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]\n"
					  "[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]\n"
					  "[ TABLESPACE %s ]\n"
					  "\n"
					  "CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] %s\n"
					  "    PARTITION OF %s [ (\n"
					  "  { %s [ WITH OPTIONS ] [ %s [ ... ] ]\n"
					  "    | %s }\n"
					  "    [, ... ]\n"
					  ") ] { FOR VALUES %s | DEFAULT }\n"
					  "[ PARTITION BY { RANGE | LIST | HASH } ( { %s | ( %s ) } [ COLLATE %s ] [ %s ] [, ... ] ) ]\n"
					  "[ WITH ( %s [= %s] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]\n"
					  "[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]\n"
					  "[ TABLESPACE %s ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "[ CONSTRAINT %s ]\n"
					  "{ NOT NULL |\n"
					  "  NULL |\n"
					  "  CHECK ( %s ) [ NO INHERIT ] |\n"
					  "  DEFAULT %s |\n"
					  "  GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( %s ) ] |\n"
					  "  UNIQUE %s |\n"
					  "  PRIMARY KEY %s |\n"
					  "  REFERENCES %s [ ( %s ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]\n"
					  "    [ ON DELETE %s ] [ ON UPDATE %s ] }\n"
					  "[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "[ CONSTRAINT %s ]\n"
					  "{ CHECK ( %s ) [ NO INHERIT ] |\n"
					  "  UNIQUE ( %s [, ... ] ) %s |\n"
					  "  PRIMARY KEY ( %s [, ... ] ) %s |\n"
					  "  EXCLUDE [ USING %s ] ( %s WITH %s [, ... ] ) %s [ WHERE ( %s ) ] |\n"
					  "  FOREIGN KEY ( %s [, ... ] ) REFERENCES %s [ ( %s [, ... ] ) ]\n"
					  "    [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE %s ] [ ON UPDATE %s ] }\n"
					  "[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "{ INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | IDENTITY | INDEXES | STATISTICS | STORAGE | ALL }\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "IN ( { %s | %s | TRUE | FALSE | NULL } [, ...] ) |\n"
					  "FROM ( { %s | %s | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] )\n"
					  "  TO ( { %s | %s | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] ) |\n"
					  "WITH ( MODULUS %s, REMAINDER %s )\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "[ INCLUDE ( %s [, ... ] ) ]\n"
					  "[ WITH ( %s [= %s] [, ... ] ) ]\n"
					  "[ USING INDEX TABLESPACE %s ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "{ %s | ( %s ) } [ %s ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ]",
					  _("table_name"),
					  _("column_name"),
					  _("data_type"),
					  _("collation"),
					  _("column_constraint"),
					  _("table_constraint"),
					  _("source_table"),
					  _("like_option"),
					  _("parent_table"),
					  _("column_name"),
					  _("expression"),
					  _("collation"),
					  _("opclass"),
					  _("storage_parameter"),
					  _("value"),
					  _("tablespace_name"),
					  _("table_name"),
					  _("type_name"),
					  _("column_name"),
					  _("column_constraint"),
					  _("table_constraint"),
					  _("column_name"),
					  _("expression"),
					  _("collation"),
					  _("opclass"),
					  _("storage_parameter"),
					  _("value"),
					  _("tablespace_name"),
					  _("table_name"),
					  _("parent_table"),
					  _("column_name"),
					  _("column_constraint"),
					  _("table_constraint"),
					  _("partition_bound_spec"),
					  _("column_name"),
					  _("expression"),
					  _("collation"),
					  _("opclass"),
					  _("storage_parameter"),
					  _("value"),
					  _("tablespace_name"),
					  _("where column_constraint is:"),
					  _("constraint_name"),
					  _("expression"),
					  _("default_expr"),
					  _("sequence_options"),
					  _("index_parameters"),
					  _("index_parameters"),
					  _("reftable"),
					  _("refcolumn"),
					  _("action"),
					  _("action"),
					  _("and table_constraint is:"),
					  _("constraint_name"),
					  _("expression"),
					  _("column_name"),
					  _("index_parameters"),
					  _("column_name"),
					  _("index_parameters"),
					  _("index_method"),
					  _("exclude_element"),
					  _("operator"),
					  _("index_parameters"),
					  _("predicate"),
					  _("column_name"),
					  _("reftable"),
					  _("refcolumn"),
					  _("action"),
					  _("action"),
					  _("and like_option is:"),
					  _("and partition_bound_spec is:"),
					  _("numeric_literal"),
					  _("string_literal"),
					  _("numeric_literal"),
					  _("string_literal"),
					  _("numeric_literal"),
					  _("string_literal"),
					  _("numeric_literal"),
					  _("numeric_literal"),
					  _("index_parameters in UNIQUE, PRIMARY KEY, and EXCLUDE constraints are:"),
					  _("column_name"),
					  _("storage_parameter"),
					  _("value"),
					  _("tablespace_name"),
					  _("exclude_element in an EXCLUDE constraint is:"),
					  _("column_name"),
					  _("expression"),
					  _("opclass"));
}

static void
sql_help_CREATE_TABLE_AS(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] %s\n"
					  "    [ (%s [, ...] ) ]\n"
					  "    [ WITH ( %s [= %s] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]\n"
					  "    [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]\n"
					  "    [ TABLESPACE %s ]\n"
					  "    AS %s\n"
					  "    [ WITH [ NO ] DATA ]",
					  _("table_name"),
					  _("column_name"),
					  _("storage_parameter"),
					  _("value"),
					  _("tablespace_name"),
					  _("query"));
}

static void
sql_help_CREATE_TABLESPACE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE TABLESPACE %s\n"
					  "    [ OWNER { %s | CURRENT_USER | SESSION_USER } ]\n"
					  "    LOCATION '%s'\n"
					  "    [ WITH ( %s = %s [, ... ] ) ]",
					  _("tablespace_name"),
					  _("new_owner"),
					  _("directory"),
					  _("tablespace_option"),
					  _("value"));
}

static void
sql_help_CREATE_TEXT_SEARCH_CONFIGURATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE TEXT SEARCH CONFIGURATION %s (\n"
					  "    PARSER = %s |\n"
					  "    COPY = %s\n"
					  ")",
					  _("name"),
					  _("parser_name"),
					  _("source_config"));
}

static void
sql_help_CREATE_TEXT_SEARCH_DICTIONARY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE TEXT SEARCH DICTIONARY %s (\n"
					  "    TEMPLATE = %s\n"
					  "    [, %s = %s [, ... ]]\n"
					  ")",
					  _("name"),
					  _("template"),
					  _("option"),
					  _("value"));
}

static void
sql_help_CREATE_TEXT_SEARCH_PARSER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE TEXT SEARCH PARSER %s (\n"
					  "    START = %s ,\n"
					  "    GETTOKEN = %s ,\n"
					  "    END = %s ,\n"
					  "    LEXTYPES = %s\n"
					  "    [, HEADLINE = %s ]\n"
					  ")",
					  _("name"),
					  _("start_function"),
					  _("gettoken_function"),
					  _("end_function"),
					  _("lextypes_function"),
					  _("headline_function"));
}

static void
sql_help_CREATE_TEXT_SEARCH_TEMPLATE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE TEXT SEARCH TEMPLATE %s (\n"
					  "    [ INIT = %s , ]\n"
					  "    LEXIZE = %s\n"
					  ")",
					  _("name"),
					  _("init_function"),
					  _("lexize_function"));
}

static void
sql_help_CREATE_TRANSFORM(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ OR REPLACE ] TRANSFORM FOR %s LANGUAGE %s (\n"
					  "    FROM SQL WITH FUNCTION %s [ (%s [, ...]) ],\n"
					  "    TO SQL WITH FUNCTION %s [ (%s [, ...]) ]\n"
					  ");",
					  _("type_name"),
					  _("lang_name"),
					  _("from_sql_function_name"),
					  _("argument_type"),
					  _("to_sql_function_name"),
					  _("argument_type"));
}

static void
sql_help_CREATE_TRIGGER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ CONSTRAINT ] TRIGGER %s { BEFORE | AFTER | INSTEAD OF } { %s [ OR ... ] }\n"
					  "    ON %s\n"
					  "    [ FROM %s ]\n"
					  "    [ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALLY IMMEDIATE | INITIALLY DEFERRED ] ]\n"
					  "    [ REFERENCING { { OLD | NEW } TABLE [ AS ] %s } [ ... ] ]\n"
					  "    [ FOR [ EACH ] { ROW | STATEMENT } ]\n"
					  "    [ WHEN ( %s ) ]\n"
					  "    EXECUTE { FUNCTION | PROCEDURE } %s ( %s )\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    INSERT\n"
					  "    UPDATE [ OF %s [, ... ] ]\n"
					  "    DELETE\n"
					  "    TRUNCATE",
					  _("name"),
					  _("event"),
					  _("table_name"),
					  _("referenced_table_name"),
					  _("transition_relation_name"),
					  _("condition"),
					  _("function_name"),
					  _("arguments"),
					  _("where event can be one of:"),
					  _("column_name"));
}

static void
sql_help_CREATE_TYPE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE TYPE %s AS\n"
					  "    ( [ %s %s [ COLLATE %s ] [, ... ] ] )\n"
					  "\n"
					  "CREATE TYPE %s AS ENUM\n"
					  "    ( [ '%s' [, ... ] ] )\n"
					  "\n"
					  "CREATE TYPE %s AS RANGE (\n"
					  "    SUBTYPE = %s\n"
					  "    [ , SUBTYPE_OPCLASS = %s ]\n"
					  "    [ , COLLATION = %s ]\n"
					  "    [ , CANONICAL = %s ]\n"
					  "    [ , SUBTYPE_DIFF = %s ]\n"
					  ")\n"
					  "\n"
					  "CREATE TYPE %s (\n"
					  "    INPUT = %s,\n"
					  "    OUTPUT = %s\n"
					  "    [ , RECEIVE = %s ]\n"
					  "    [ , SEND = %s ]\n"
					  "    [ , TYPMOD_IN = %s ]\n"
					  "    [ , TYPMOD_OUT = %s ]\n"
					  "    [ , ANALYZE = %s ]\n"
					  "    [ , INTERNALLENGTH = { %s | VARIABLE } ]\n"
					  "    [ , PASSEDBYVALUE ]\n"
					  "    [ , ALIGNMENT = %s ]\n"
					  "    [ , STORAGE = %s ]\n"
					  "    [ , LIKE = %s ]\n"
					  "    [ , CATEGORY = %s ]\n"
					  "    [ , PREFERRED = %s ]\n"
					  "    [ , DEFAULT = %s ]\n"
					  "    [ , ELEMENT = %s ]\n"
					  "    [ , DELIMITER = %s ]\n"
					  "    [ , COLLATABLE = %s ]\n"
					  ")\n"
					  "\n"
					  "CREATE TYPE %s",
					  _("name"),
					  _("attribute_name"),
					  _("data_type"),
					  _("collation"),
					  _("name"),
					  _("label"),
					  _("name"),
					  _("subtype"),
					  _("subtype_operator_class"),
					  _("collation"),
					  _("canonical_function"),
					  _("subtype_diff_function"),
					  _("name"),
					  _("input_function"),
					  _("output_function"),
					  _("receive_function"),
					  _("send_function"),
					  _("type_modifier_input_function"),
					  _("type_modifier_output_function"),
					  _("analyze_function"),
					  _("internallength"),
					  _("alignment"),
					  _("storage"),
					  _("like_type"),
					  _("category"),
					  _("preferred"),
					  _("default"),
					  _("element"),
					  _("delimiter"),
					  _("collatable"),
					  _("name"));
}

static void
sql_help_CREATE_USER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE USER %s [ [ WITH ] %s [ ... ] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "      SUPERUSER | NOSUPERUSER\n"
					  "    | CREATEDB | NOCREATEDB\n"
					  "    | CREATEROLE | NOCREATEROLE\n"
					  "    | INHERIT | NOINHERIT\n"
					  "    | LOGIN | NOLOGIN\n"
					  "    | REPLICATION | NOREPLICATION\n"
					  "    | BYPASSRLS | NOBYPASSRLS\n"
					  "    | CONNECTION LIMIT %s\n"
					  "    | [ ENCRYPTED ] PASSWORD '%s' | PASSWORD NULL\n"
					  "    | VALID UNTIL '%s'\n"
					  "    | IN ROLE %s [, ...]\n"
					  "    | IN GROUP %s [, ...]\n"
					  "    | ROLE %s [, ...]\n"
					  "    | ADMIN %s [, ...]\n"
					  "    | USER %s [, ...]\n"
					  "    | SYSID %s",
					  _("name"),
					  _("option"),
					  _("where option can be:"),
					  _("connlimit"),
					  _("password"),
					  _("timestamp"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"),
					  _("uid"));
}

static void
sql_help_CREATE_USER_MAPPING(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE USER MAPPING [ IF NOT EXISTS ] FOR { %s | USER | CURRENT_USER | PUBLIC }\n"
					  "    SERVER %s\n"
					  "    [ OPTIONS ( %s '%s' [ , ... ] ) ]",
					  _("user_name"),
					  _("server_name"),
					  _("option"),
					  _("value"));
}

static void
sql_help_CREATE_VIEW(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW %s [ ( %s [, ...] ) ]\n"
					  "    [ WITH ( %s [= %s] [, ... ] ) ]\n"
					  "    AS %s\n"
					  "    [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]",
					  _("name"),
					  _("column_name"),
					  _("view_option_name"),
					  _("view_option_value"),
					  _("query"));
}

static void
sql_help_DEALLOCATE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DEALLOCATE [ PREPARE ] { %s | ALL }",
					  _("name"));
}

static void
sql_help_DECLARE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DECLARE %s [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ]\n"
					  "    CURSOR [ { WITH | WITHOUT } HOLD ] FOR %s",
					  _("name"),
					  _("query"));
}

static void
sql_help_DELETE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "[ WITH [ RECURSIVE ] %s [, ...] ]\n"
					  "DELETE FROM [ ONLY ] %s [ * ] [ [ AS ] %s ]\n"
					  "    [ USING %s ]\n"
					  "    [ WHERE %s | WHERE CURRENT OF %s ]\n"
					  "    [ RETURNING * | %s [ [ AS ] %s ] [, ...] ]",
					  _("with_query"),
					  _("table_name"),
					  _("alias"),
					  _("using_list"),
					  _("condition"),
					  _("cursor_name"),
					  _("output_expression"),
					  _("output_name"));
}

static void
sql_help_DISCARD(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DISCARD { ALL | PLANS | SEQUENCES | TEMPORARY | TEMP }");
}

static void
sql_help_DO(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DO [ LANGUAGE %s ] %s",
					  _("lang_name"),
					  _("code"));
}

static void
sql_help_DROP_ACCESS_METHOD(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP ACCESS METHOD [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_AGGREGATE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP AGGREGATE [ IF EXISTS ] %s ( %s ) [, ...] [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "* |\n"
					  "[ %s ] [ %s ] %s [ , ... ] |\n"
					  "[ [ %s ] [ %s ] %s [ , ... ] ] ORDER BY [ %s ] [ %s ] %s [ , ... ]",
					  _("name"),
					  _("aggregate_signature"),
					  _("where aggregate_signature is:"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"));
}

static void
sql_help_DROP_CAST(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP CAST [ IF EXISTS ] (%s AS %s) [ CASCADE | RESTRICT ]",
					  _("source_type"),
					  _("target_type"));
}

static void
sql_help_DROP_COLLATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP COLLATION [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_CONVERSION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP CONVERSION [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_DATABASE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP DATABASE [ IF EXISTS ] %s",
					  _("name"));
}

static void
sql_help_DROP_DOMAIN(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP DOMAIN [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_EVENT_TRIGGER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP EVENT TRIGGER [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_EXTENSION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP EXTENSION [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_FOREIGN_DATA_WRAPPER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP FOREIGN DATA WRAPPER [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_FOREIGN_TABLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP FOREIGN TABLE [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_FUNCTION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP FUNCTION [ IF EXISTS ] %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] [, ...]\n"
					  "    [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"));
}

static void
sql_help_DROP_GROUP(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP GROUP [ IF EXISTS ] %s [, ...]",
					  _("name"));
}

static void
sql_help_DROP_INDEX(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP INDEX [ CONCURRENTLY ] [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_LANGUAGE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP [ PROCEDURAL ] LANGUAGE [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_MATERIALIZED_VIEW(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP MATERIALIZED VIEW [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_OPERATOR(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP OPERATOR [ IF EXISTS ] %s ( { %s | NONE } , { %s | NONE } ) [, ...] [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("left_type"),
					  _("right_type"));
}

static void
sql_help_DROP_OPERATOR_CLASS(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP OPERATOR CLASS [ IF EXISTS ] %s USING %s [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("index_method"));
}

static void
sql_help_DROP_OPERATOR_FAMILY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP OPERATOR FAMILY [ IF EXISTS ] %s USING %s [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("index_method"));
}

static void
sql_help_DROP_OWNED(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP OWNED BY { %s | CURRENT_USER | SESSION_USER } [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_POLICY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP POLICY [ IF EXISTS ] %s ON %s [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("table_name"));
}

static void
sql_help_DROP_PROCEDURE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP PROCEDURE [ IF EXISTS ] %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] [, ...]\n"
					  "    [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"));
}

static void
sql_help_DROP_PUBLICATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP PUBLICATION [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_ROLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP ROLE [ IF EXISTS ] %s [, ...]",
					  _("name"));
}

static void
sql_help_DROP_ROUTINE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP ROUTINE [ IF EXISTS ] %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] [, ...]\n"
					  "    [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"));
}

static void
sql_help_DROP_RULE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP RULE [ IF EXISTS ] %s ON %s [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("table_name"));
}

static void
sql_help_DROP_SCHEMA(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP SCHEMA [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_SEQUENCE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP SEQUENCE [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_SERVER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP SERVER [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_STATISTICS(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP STATISTICS [ IF EXISTS ] %s [, ...]",
					  _("name"));
}

static void
sql_help_DROP_SUBSCRIPTION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP SUBSCRIPTION [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_TABLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP TABLE [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_TABLESPACE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP TABLESPACE [ IF EXISTS ] %s",
					  _("name"));
}

static void
sql_help_DROP_TEXT_SEARCH_CONFIGURATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP TEXT SEARCH CONFIGURATION [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_TEXT_SEARCH_DICTIONARY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP TEXT SEARCH DICTIONARY [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_TEXT_SEARCH_PARSER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP TEXT SEARCH PARSER [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_TEXT_SEARCH_TEMPLATE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP TEXT SEARCH TEMPLATE [ IF EXISTS ] %s [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_TRANSFORM(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP TRANSFORM [ IF EXISTS ] FOR %s LANGUAGE %s [ CASCADE | RESTRICT ]",
					  _("type_name"),
					  _("lang_name"));
}

static void
sql_help_DROP_TRIGGER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP TRIGGER [ IF EXISTS ] %s ON %s [ CASCADE | RESTRICT ]",
					  _("name"),
					  _("table_name"));
}

static void
sql_help_DROP_TYPE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP TYPE [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_DROP_USER(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP USER [ IF EXISTS ] %s [, ...]",
					  _("name"));
}

static void
sql_help_DROP_USER_MAPPING(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP USER MAPPING [ IF EXISTS ] FOR { %s | USER | CURRENT_USER | PUBLIC } SERVER %s",
					  _("user_name"),
					  _("server_name"));
}

static void
sql_help_DROP_VIEW(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "DROP VIEW [ IF EXISTS ] %s [, ...] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_END(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "END [ WORK | TRANSACTION ]");
}

static void
sql_help_EXECUTE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "EXECUTE %s [ ( %s [, ...] ) ]",
					  _("name"),
					  _("parameter"));
}

static void
sql_help_EXPLAIN(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "EXPLAIN [ ( %s [, ...] ) ] %s\n"
					  "EXPLAIN [ ANALYZE ] [ VERBOSE ] %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ANALYZE [ %s ]\n"
					  "    VERBOSE [ %s ]\n"
					  "    COSTS [ %s ]\n"
					  "    BUFFERS [ %s ]\n"
					  "    TIMING [ %s ]\n"
					  "    SUMMARY [ %s ]\n"
					  "    FORMAT { TEXT | XML | JSON | YAML }",
					  _("option"),
					  _("statement"),
					  _("statement"),
					  _("where option can be one of:"),
					  _("boolean"),
					  _("boolean"),
					  _("boolean"),
					  _("boolean"),
					  _("boolean"),
					  _("boolean"));
}

static void
sql_help_FETCH(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "FETCH [ %s [ FROM | IN ] ] %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    NEXT\n"
					  "    PRIOR\n"
					  "    FIRST\n"
					  "    LAST\n"
					  "    ABSOLUTE %s\n"
					  "    RELATIVE %s\n"
					  "    %s\n"
					  "    ALL\n"
					  "    FORWARD\n"
					  "    FORWARD %s\n"
					  "    FORWARD ALL\n"
					  "    BACKWARD\n"
					  "    BACKWARD %s\n"
					  "    BACKWARD ALL",
					  _("direction"),
					  _("cursor_name"),
					  _("where direction can be empty or one of:"),
					  _("count"),
					  _("count"),
					  _("count"),
					  _("count"),
					  _("count"));
}

static void
sql_help_GRANT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }\n"
					  "    [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON { [ TABLE ] %s [, ...]\n"
					  "         | ALL TABLES IN SCHEMA %s [, ...] }\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( %s [, ...] )\n"
					  "    [, ...] | ALL [ PRIVILEGES ] ( %s [, ...] ) }\n"
					  "    ON [ TABLE ] %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { { USAGE | SELECT | UPDATE }\n"
					  "    [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON { SEQUENCE %s [, ...]\n"
					  "         | ALL SEQUENCES IN SCHEMA %s [, ...] }\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON DATABASE %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON DOMAIN %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON FOREIGN DATA WRAPPER %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON FOREIGN SERVER %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { EXECUTE | ALL [ PRIVILEGES ] }\n"
					  "    ON { { FUNCTION | PROCEDURE | ROUTINE } %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] [, ...]\n"
					  "         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA %s [, ...] }\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON LANGUAGE %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON LARGE OBJECT %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON SCHEMA %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { CREATE | ALL [ PRIVILEGES ] }\n"
					  "    ON TABLESPACE %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "GRANT { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON TYPE %s [, ...]\n"
					  "    TO %s [, ...] [ WITH GRANT OPTION ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    [ GROUP ] %s\n"
					  "  | PUBLIC\n"
					  "  | CURRENT_USER\n"
					  "  | SESSION_USER\n"
					  "\n"
					  "GRANT %s [, ...] TO %s [, ...] [ WITH ADMIN OPTION ]",
					  _("table_name"),
					  _("schema_name"),
					  _("role_specification"),
					  _("column_name"),
					  _("column_name"),
					  _("table_name"),
					  _("role_specification"),
					  _("sequence_name"),
					  _("schema_name"),
					  _("role_specification"),
					  _("database_name"),
					  _("role_specification"),
					  _("domain_name"),
					  _("role_specification"),
					  _("fdw_name"),
					  _("role_specification"),
					  _("server_name"),
					  _("role_specification"),
					  _("routine_name"),
					  _("argmode"),
					  _("arg_name"),
					  _("arg_type"),
					  _("schema_name"),
					  _("role_specification"),
					  _("lang_name"),
					  _("role_specification"),
					  _("loid"),
					  _("role_specification"),
					  _("schema_name"),
					  _("role_specification"),
					  _("tablespace_name"),
					  _("role_specification"),
					  _("type_name"),
					  _("role_specification"),
					  _("where role_specification can be:"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"));
}

static void
sql_help_IMPORT_FOREIGN_SCHEMA(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "IMPORT FOREIGN SCHEMA %s\n"
					  "    [ { LIMIT TO | EXCEPT } ( %s [, ...] ) ]\n"
					  "    FROM SERVER %s\n"
					  "    INTO %s\n"
					  "    [ OPTIONS ( %s '%s' [, ... ] ) ]",
					  _("remote_schema"),
					  _("table_name"),
					  _("server_name"),
					  _("local_schema"),
					  _("option"),
					  _("value"));
}

static void
sql_help_INSERT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "[ WITH [ RECURSIVE ] %s [, ...] ]\n"
					  "INSERT INTO %s [ AS %s ] [ ( %s [, ...] ) ]\n"
					  "    [ OVERRIDING { SYSTEM | USER} VALUE ]\n"
					  "    { DEFAULT VALUES | VALUES ( { %s | DEFAULT } [, ...] ) [, ...] | %s }\n"
					  "    [ ON CONFLICT [ %s ] %s ]\n"
					  "    [ RETURNING * | %s [ [ AS ] %s ] [, ...] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ( { %s | ( %s ) } [ COLLATE %s ] [ %s ] [, ...] ) [ WHERE %s ]\n"
					  "    ON CONSTRAINT %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    DO NOTHING\n"
					  "    DO UPDATE SET { %s = { %s | DEFAULT } |\n"
					  "                    ( %s [, ...] ) = [ ROW ] ( { %s | DEFAULT } [, ...] ) |\n"
					  "                    ( %s [, ...] ) = ( %s )\n"
					  "                  } [, ...]\n"
					  "              [ WHERE %s ]",
					  _("with_query"),
					  _("table_name"),
					  _("alias"),
					  _("column_name"),
					  _("expression"),
					  _("query"),
					  _("conflict_target"),
					  _("conflict_action"),
					  _("output_expression"),
					  _("output_name"),
					  _("where conflict_target can be one of:"),
					  _("index_column_name"),
					  _("index_expression"),
					  _("collation"),
					  _("opclass"),
					  _("index_predicate"),
					  _("constraint_name"),
					  _("and conflict_action is one of:"),
					  _("column_name"),
					  _("expression"),
					  _("column_name"),
					  _("expression"),
					  _("column_name"),
					  _("sub-SELECT"),
					  _("condition"));
}

static void
sql_help_LISTEN(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "LISTEN %s",
					  _("channel"));
}

static void
sql_help_LOAD(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "LOAD '%s'",
					  _("filename"));
}

static void
sql_help_LOCK(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "LOCK [ TABLE ] [ ONLY ] %s [ * ] [, ...] [ IN %s MODE ] [ NOWAIT ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE\n"
					  "    | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE",
					  _("name"),
					  _("lockmode"),
					  _("where lockmode is one of:"));
}

static void
sql_help_MOVE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "MOVE [ %s [ FROM | IN ] ] %s\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    NEXT\n"
					  "    PRIOR\n"
					  "    FIRST\n"
					  "    LAST\n"
					  "    ABSOLUTE %s\n"
					  "    RELATIVE %s\n"
					  "    %s\n"
					  "    ALL\n"
					  "    FORWARD\n"
					  "    FORWARD %s\n"
					  "    FORWARD ALL\n"
					  "    BACKWARD\n"
					  "    BACKWARD %s\n"
					  "    BACKWARD ALL",
					  _("direction"),
					  _("cursor_name"),
					  _("where direction can be empty or one of:"),
					  _("count"),
					  _("count"),
					  _("count"),
					  _("count"),
					  _("count"));
}

static void
sql_help_NOTIFY(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "NOTIFY %s [ , %s ]",
					  _("channel"),
					  _("payload"));
}

static void
sql_help_PREPARE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "PREPARE %s [ ( %s [, ...] ) ] AS %s",
					  _("name"),
					  _("data_type"),
					  _("statement"));
}

static void
sql_help_PREPARE_TRANSACTION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "PREPARE TRANSACTION %s",
					  _("transaction_id"));
}

static void
sql_help_REASSIGN_OWNED(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "REASSIGN OWNED BY { %s | CURRENT_USER | SESSION_USER } [, ...]\n"
					  "               TO { %s | CURRENT_USER | SESSION_USER }",
					  _("old_role"),
					  _("new_role"));
}

static void
sql_help_REFRESH_MATERIALIZED_VIEW(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] %s\n"
					  "    [ WITH [ NO ] DATA ]",
					  _("name"));
}

static void
sql_help_REINDEX(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "REINDEX [ ( VERBOSE ) ] { INDEX | TABLE | SCHEMA | DATABASE | SYSTEM } %s",
					  _("name"));
}

static void
sql_help_RELEASE_SAVEPOINT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "RELEASE [ SAVEPOINT ] %s",
					  _("savepoint_name"));
}

static void
sql_help_RESET(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "RESET %s\n"
					  "RESET ALL",
					  _("configuration_parameter"));
}

static void
sql_help_REVOKE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }\n"
					  "    [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON { [ TABLE ] %s [, ...]\n"
					  "         | ALL TABLES IN SCHEMA %s [, ...] }\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { { SELECT | INSERT | UPDATE | REFERENCES } ( %s [, ...] )\n"
					  "    [, ...] | ALL [ PRIVILEGES ] ( %s [, ...] ) }\n"
					  "    ON [ TABLE ] %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { { USAGE | SELECT | UPDATE }\n"
					  "    [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON { SEQUENCE %s [, ...]\n"
					  "         | ALL SEQUENCES IN SCHEMA %s [, ...] }\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON DATABASE %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON DOMAIN %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON FOREIGN DATA WRAPPER %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON FOREIGN SERVER %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { EXECUTE | ALL [ PRIVILEGES ] }\n"
					  "    ON { { FUNCTION | PROCEDURE | ROUTINE } %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] [, ...]\n"
					  "         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA %s [, ...] }\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON LANGUAGE %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON LARGE OBJECT %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }\n"
					  "    ON SCHEMA %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { CREATE | ALL [ PRIVILEGES ] }\n"
					  "    ON TABLESPACE %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ GRANT OPTION FOR ]\n"
					  "    { USAGE | ALL [ PRIVILEGES ] }\n"
					  "    ON TYPE %s [, ...]\n"
					  "    FROM { [ GROUP ] %s | PUBLIC } [, ...]\n"
					  "    [ CASCADE | RESTRICT ]\n"
					  "\n"
					  "REVOKE [ ADMIN OPTION FOR ]\n"
					  "    %s [, ...] FROM %s [, ...]\n"
					  "    [ CASCADE | RESTRICT ]",
					  _("table_name"),
					  _("schema_name"),
					  _("role_name"),
					  _("column_name"),
					  _("column_name"),
					  _("table_name"),
					  _("role_name"),
					  _("sequence_name"),
					  _("schema_name"),
					  _("role_name"),
					  _("database_name"),
					  _("role_name"),
					  _("domain_name"),
					  _("role_name"),
					  _("fdw_name"),
					  _("role_name"),
					  _("server_name"),
					  _("role_name"),
					  _("function_name"),
					  _("argmode"),
					  _("arg_name"),
					  _("arg_type"),
					  _("schema_name"),
					  _("role_name"),
					  _("lang_name"),
					  _("role_name"),
					  _("loid"),
					  _("role_name"),
					  _("schema_name"),
					  _("role_name"),
					  _("tablespace_name"),
					  _("role_name"),
					  _("type_name"),
					  _("role_name"),
					  _("role_name"),
					  _("role_name"));
}

static void
sql_help_ROLLBACK(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ROLLBACK [ WORK | TRANSACTION ]");
}

static void
sql_help_ROLLBACK_PREPARED(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ROLLBACK PREPARED %s",
					  _("transaction_id"));
}

static void
sql_help_ROLLBACK_TO_SAVEPOINT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] %s",
					  _("savepoint_name"));
}

static void
sql_help_SAVEPOINT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "SAVEPOINT %s",
					  _("savepoint_name"));
}

static void
sql_help_SECURITY_LABEL(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "SECURITY LABEL [ FOR %s ] ON\n"
					  "{\n"
					  "  TABLE %s |\n"
					  "  COLUMN %s.%s |\n"
					  "  AGGREGATE %s ( %s ) |\n"
					  "  DATABASE %s |\n"
					  "  DOMAIN %s |\n"
					  "  EVENT TRIGGER %s |\n"
					  "  FOREIGN TABLE %s\n"
					  "  FUNCTION %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] |\n"
					  "  LARGE OBJECT %s |\n"
					  "  MATERIALIZED VIEW %s |\n"
					  "  [ PROCEDURAL ] LANGUAGE %s |\n"
					  "  PROCEDURE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] |\n"
					  "  PUBLICATION %s |\n"
					  "  ROLE %s |\n"
					  "  ROUTINE %s [ ( [ [ %s ] [ %s ] %s [, ...] ] ) ] |\n"
					  "  SCHEMA %s |\n"
					  "  SEQUENCE %s |\n"
					  "  SUBSCRIPTION %s |\n"
					  "  TABLESPACE %s |\n"
					  "  TYPE %s |\n"
					  "  VIEW %s\n"
					  "} IS '%s'\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "* |\n"
					  "[ %s ] [ %s ] %s [ , ... ] |\n"
					  "[ [ %s ] [ %s ] %s [ , ... ] ] ORDER BY [ %s ] [ %s ] %s [ , ... ]",
					  _("provider"),
					  _("object_name"),
					  _("table_name"),
					  _("column_name"),
					  _("aggregate_name"),
					  _("aggregate_signature"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("function_name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("large_object_oid"),
					  _("object_name"),
					  _("object_name"),
					  _("procedure_name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("object_name"),
					  _("object_name"),
					  _("routine_name"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("object_name"),
					  _("label"),
					  _("where aggregate_signature is:"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"),
					  _("argmode"),
					  _("argname"),
					  _("argtype"));
}

static void
sql_help_SELECT(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "[ WITH [ RECURSIVE ] %s [, ...] ]\n"
					  "SELECT [ ALL | DISTINCT [ ON ( %s [, ...] ) ] ]\n"
					  "    [ * | %s [ [ AS ] %s ] [, ...] ]\n"
					  "    [ FROM %s [, ...] ]\n"
					  "    [ WHERE %s ]\n"
					  "    [ GROUP BY %s [, ...] ]\n"
					  "    [ HAVING %s [, ...] ]\n"
					  "    [ WINDOW %s AS ( %s ) [, ...] ]\n"
					  "    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] %s ]\n"
					  "    [ ORDER BY %s [ ASC | DESC | USING %s ] [ NULLS { FIRST | LAST } ] [, ...] ]\n"
					  "    [ LIMIT { %s | ALL } ]\n"
					  "    [ OFFSET %s [ ROW | ROWS ] ]\n"
					  "    [ FETCH { FIRST | NEXT } [ %s ] { ROW | ROWS } ONLY ]\n"
					  "    [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF %s [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    [ ONLY ] %s [ * ] [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "                [ TABLESAMPLE %s ( %s [, ...] ) [ REPEATABLE ( %s ) ] ]\n"
					  "    [ LATERAL ] ( %s ) [ AS ] %s [ ( %s [, ...] ) ]\n"
					  "    %s [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "    [ LATERAL ] %s ( [ %s [, ...] ] )\n"
					  "                [ WITH ORDINALITY ] [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "    [ LATERAL ] %s ( [ %s [, ...] ] ) [ AS ] %s ( %s [, ...] )\n"
					  "    [ LATERAL ] %s ( [ %s [, ...] ] ) AS ( %s [, ...] )\n"
					  "    [ LATERAL ] ROWS FROM( %s ( [ %s [, ...] ] ) [ AS ( %s [, ...] ) ] [, ...] )\n"
					  "                [ WITH ORDINALITY ] [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "    %s [ NATURAL ] %s %s [ ON %s | USING ( %s [, ...] ) ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ( )\n"
					  "    %s\n"
					  "    ( %s [, ...] )\n"
					  "    ROLLUP ( { %s | ( %s [, ...] ) } [, ...] )\n"
					  "    CUBE ( { %s | ( %s [, ...] ) } [, ...] )\n"
					  "    GROUPING SETS ( %s [, ...] )\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    %s [ ( %s [, ...] ) ] AS ( %s | %s | %s | %s | %s )\n"
					  "\n"
					  "TABLE [ ONLY ] %s [ * ]",
					  _("with_query"),
					  _("expression"),
					  _("expression"),
					  _("output_name"),
					  _("from_item"),
					  _("condition"),
					  _("grouping_element"),
					  _("condition"),
					  _("window_name"),
					  _("window_definition"),
					  _("select"),
					  _("expression"),
					  _("operator"),
					  _("count"),
					  _("start"),
					  _("count"),
					  _("table_name"),
					  _("where from_item can be one of:"),
					  _("table_name"),
					  _("alias"),
					  _("column_alias"),
					  _("sampling_method"),
					  _("argument"),
					  _("seed"),
					  _("select"),
					  _("alias"),
					  _("column_alias"),
					  _("with_query_name"),
					  _("alias"),
					  _("column_alias"),
					  _("function_name"),
					  _("argument"),
					  _("alias"),
					  _("column_alias"),
					  _("function_name"),
					  _("argument"),
					  _("alias"),
					  _("column_definition"),
					  _("function_name"),
					  _("argument"),
					  _("column_definition"),
					  _("function_name"),
					  _("argument"),
					  _("column_definition"),
					  _("alias"),
					  _("column_alias"),
					  _("from_item"),
					  _("join_type"),
					  _("from_item"),
					  _("join_condition"),
					  _("join_column"),
					  _("and grouping_element can be one of:"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("grouping_element"),
					  _("and with_query is:"),
					  _("with_query_name"),
					  _("column_name"),
					  _("select"),
					  _("values"),
					  _("insert"),
					  _("update"),
					  _("delete"),
					  _("table_name"));
}

static void
sql_help_SELECT_INTO(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "[ WITH [ RECURSIVE ] %s [, ...] ]\n"
					  "SELECT [ ALL | DISTINCT [ ON ( %s [, ...] ) ] ]\n"
					  "    * | %s [ [ AS ] %s ] [, ...]\n"
					  "    INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] %s\n"
					  "    [ FROM %s [, ...] ]\n"
					  "    [ WHERE %s ]\n"
					  "    [ GROUP BY %s [, ...] ]\n"
					  "    [ HAVING %s [, ...] ]\n"
					  "    [ WINDOW %s AS ( %s ) [, ...] ]\n"
					  "    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] %s ]\n"
					  "    [ ORDER BY %s [ ASC | DESC | USING %s ] [ NULLS { FIRST | LAST } ] [, ...] ]\n"
					  "    [ LIMIT { %s | ALL } ]\n"
					  "    [ OFFSET %s [ ROW | ROWS ] ]\n"
					  "    [ FETCH { FIRST | NEXT } [ %s ] { ROW | ROWS } ONLY ]\n"
					  "    [ FOR { UPDATE | SHARE } [ OF %s [, ...] ] [ NOWAIT ] [...] ]",
					  _("with_query"),
					  _("expression"),
					  _("expression"),
					  _("output_name"),
					  _("new_table"),
					  _("from_item"),
					  _("condition"),
					  _("expression"),
					  _("condition"),
					  _("window_name"),
					  _("window_definition"),
					  _("select"),
					  _("expression"),
					  _("operator"),
					  _("count"),
					  _("start"),
					  _("count"),
					  _("table_name"));
}

static void
sql_help_SET(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "SET [ SESSION | LOCAL ] %s { TO | = } { %s | '%s' | DEFAULT }\n"
					  "SET [ SESSION | LOCAL ] TIME ZONE { %s | LOCAL | DEFAULT }",
					  _("configuration_parameter"),
					  _("value"),
					  _("value"),
					  _("timezone"));
}

static void
sql_help_SET_CONSTRAINTS(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "SET CONSTRAINTS { ALL | %s [, ...] } { DEFERRED | IMMEDIATE }",
					  _("name"));
}

static void
sql_help_SET_ROLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "SET [ SESSION | LOCAL ] ROLE %s\n"
					  "SET [ SESSION | LOCAL ] ROLE NONE\n"
					  "RESET ROLE",
					  _("role_name"));
}

static void
sql_help_SET_SESSION_AUTHORIZATION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "SET [ SESSION | LOCAL ] SESSION AUTHORIZATION %s\n"
					  "SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT\n"
					  "RESET SESSION AUTHORIZATION",
					  _("user_name"));
}

static void
sql_help_SET_TRANSACTION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "SET TRANSACTION %s [, ...]\n"
					  "SET TRANSACTION SNAPSHOT %s\n"
					  "SET SESSION CHARACTERISTICS AS TRANSACTION %s [, ...]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }\n"
					  "    READ WRITE | READ ONLY\n"
					  "    [ NOT ] DEFERRABLE",
					  _("transaction_mode"),
					  _("snapshot_id"),
					  _("transaction_mode"),
					  _("where transaction_mode is one of:"));
}

static void
sql_help_SHOW(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "SHOW %s\n"
					  "SHOW ALL",
					  _("name"));
}

static void
sql_help_START_TRANSACTION(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "START TRANSACTION [ %s [, ...] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }\n"
					  "    READ WRITE | READ ONLY\n"
					  "    [ NOT ] DEFERRABLE",
					  _("transaction_mode"),
					  _("where transaction_mode is one of:"));
}

static void
sql_help_TABLE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "[ WITH [ RECURSIVE ] %s [, ...] ]\n"
					  "SELECT [ ALL | DISTINCT [ ON ( %s [, ...] ) ] ]\n"
					  "    [ * | %s [ [ AS ] %s ] [, ...] ]\n"
					  "    [ FROM %s [, ...] ]\n"
					  "    [ WHERE %s ]\n"
					  "    [ GROUP BY %s [, ...] ]\n"
					  "    [ HAVING %s [, ...] ]\n"
					  "    [ WINDOW %s AS ( %s ) [, ...] ]\n"
					  "    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] %s ]\n"
					  "    [ ORDER BY %s [ ASC | DESC | USING %s ] [ NULLS { FIRST | LAST } ] [, ...] ]\n"
					  "    [ LIMIT { %s | ALL } ]\n"
					  "    [ OFFSET %s [ ROW | ROWS ] ]\n"
					  "    [ FETCH { FIRST | NEXT } [ %s ] { ROW | ROWS } ONLY ]\n"
					  "    [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF %s [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    [ ONLY ] %s [ * ] [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "                [ TABLESAMPLE %s ( %s [, ...] ) [ REPEATABLE ( %s ) ] ]\n"
					  "    [ LATERAL ] ( %s ) [ AS ] %s [ ( %s [, ...] ) ]\n"
					  "    %s [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "    [ LATERAL ] %s ( [ %s [, ...] ] )\n"
					  "                [ WITH ORDINALITY ] [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "    [ LATERAL ] %s ( [ %s [, ...] ] ) [ AS ] %s ( %s [, ...] )\n"
					  "    [ LATERAL ] %s ( [ %s [, ...] ] ) AS ( %s [, ...] )\n"
					  "    [ LATERAL ] ROWS FROM( %s ( [ %s [, ...] ] ) [ AS ( %s [, ...] ) ] [, ...] )\n"
					  "                [ WITH ORDINALITY ] [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "    %s [ NATURAL ] %s %s [ ON %s | USING ( %s [, ...] ) ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ( )\n"
					  "    %s\n"
					  "    ( %s [, ...] )\n"
					  "    ROLLUP ( { %s | ( %s [, ...] ) } [, ...] )\n"
					  "    CUBE ( { %s | ( %s [, ...] ) } [, ...] )\n"
					  "    GROUPING SETS ( %s [, ...] )\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    %s [ ( %s [, ...] ) ] AS ( %s | %s | %s | %s | %s )\n"
					  "\n"
					  "TABLE [ ONLY ] %s [ * ]",
					  _("with_query"),
					  _("expression"),
					  _("expression"),
					  _("output_name"),
					  _("from_item"),
					  _("condition"),
					  _("grouping_element"),
					  _("condition"),
					  _("window_name"),
					  _("window_definition"),
					  _("select"),
					  _("expression"),
					  _("operator"),
					  _("count"),
					  _("start"),
					  _("count"),
					  _("table_name"),
					  _("where from_item can be one of:"),
					  _("table_name"),
					  _("alias"),
					  _("column_alias"),
					  _("sampling_method"),
					  _("argument"),
					  _("seed"),
					  _("select"),
					  _("alias"),
					  _("column_alias"),
					  _("with_query_name"),
					  _("alias"),
					  _("column_alias"),
					  _("function_name"),
					  _("argument"),
					  _("alias"),
					  _("column_alias"),
					  _("function_name"),
					  _("argument"),
					  _("alias"),
					  _("column_definition"),
					  _("function_name"),
					  _("argument"),
					  _("column_definition"),
					  _("function_name"),
					  _("argument"),
					  _("column_definition"),
					  _("alias"),
					  _("column_alias"),
					  _("from_item"),
					  _("join_type"),
					  _("from_item"),
					  _("join_condition"),
					  _("join_column"),
					  _("and grouping_element can be one of:"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("grouping_element"),
					  _("and with_query is:"),
					  _("with_query_name"),
					  _("column_name"),
					  _("select"),
					  _("values"),
					  _("insert"),
					  _("update"),
					  _("delete"),
					  _("table_name"));
}

static void
sql_help_TRUNCATE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "TRUNCATE [ TABLE ] [ ONLY ] %s [ * ] [, ... ]\n"
					  "    [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]",
					  _("name"));
}

static void
sql_help_UNLISTEN(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "UNLISTEN { %s | * }",
					  _("channel"));
}

static void
sql_help_UPDATE(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "[ WITH [ RECURSIVE ] %s [, ...] ]\n"
					  "UPDATE [ ONLY ] %s [ * ] [ [ AS ] %s ]\n"
					  "    SET { %s = { %s | DEFAULT } |\n"
					  "          ( %s [, ...] ) = [ ROW ] ( { %s | DEFAULT } [, ...] ) |\n"
					  "          ( %s [, ...] ) = ( %s )\n"
					  "        } [, ...]\n"
					  "    [ FROM %s ]\n"
					  "    [ WHERE %s | WHERE CURRENT OF %s ]\n"
					  "    [ RETURNING * | %s [ [ AS ] %s ] [, ...] ]",
					  _("with_query"),
					  _("table_name"),
					  _("alias"),
					  _("column_name"),
					  _("expression"),
					  _("column_name"),
					  _("expression"),
					  _("column_name"),
					  _("sub-SELECT"),
					  _("from_list"),
					  _("condition"),
					  _("cursor_name"),
					  _("output_expression"),
					  _("output_name"));
}

static void
sql_help_VACUUM(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "VACUUM [ ( %s [, ...] ) ] [ %s [, ...] ]\n"
					  "VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ %s [, ...] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    FULL\n"
					  "    FREEZE\n"
					  "    VERBOSE\n"
					  "    ANALYZE\n"
					  "    DISABLE_PAGE_SKIPPING\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    %s [ ( %s [, ...] ) ]",
					  _("option"),
					  _("table_and_columns"),
					  _("table_and_columns"),
					  _("where option can be one of:"),
					  _("and table_and_columns is:"),
					  _("table_name"),
					  _("column_name"));
}

static void
sql_help_VALUES(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "VALUES ( %s [, ...] ) [, ...]\n"
					  "    [ ORDER BY %s [ ASC | DESC | USING %s ] [, ...] ]\n"
					  "    [ LIMIT { %s | ALL } ]\n"
					  "    [ OFFSET %s [ ROW | ROWS ] ]\n"
					  "    [ FETCH { FIRST | NEXT } [ %s ] { ROW | ROWS } ONLY ]",
					  _("expression"),
					  _("sort_expression"),
					  _("operator"),
					  _("count"),
					  _("start"),
					  _("count"));
}

static void
sql_help_WITH(PQExpBuffer buf)
{
	appendPQExpBuffer(buf,
					  "[ WITH [ RECURSIVE ] %s [, ...] ]\n"
					  "SELECT [ ALL | DISTINCT [ ON ( %s [, ...] ) ] ]\n"
					  "    [ * | %s [ [ AS ] %s ] [, ...] ]\n"
					  "    [ FROM %s [, ...] ]\n"
					  "    [ WHERE %s ]\n"
					  "    [ GROUP BY %s [, ...] ]\n"
					  "    [ HAVING %s [, ...] ]\n"
					  "    [ WINDOW %s AS ( %s ) [, ...] ]\n"
					  "    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] %s ]\n"
					  "    [ ORDER BY %s [ ASC | DESC | USING %s ] [ NULLS { FIRST | LAST } ] [, ...] ]\n"
					  "    [ LIMIT { %s | ALL } ]\n"
					  "    [ OFFSET %s [ ROW | ROWS ] ]\n"
					  "    [ FETCH { FIRST | NEXT } [ %s ] { ROW | ROWS } ONLY ]\n"
					  "    [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF %s [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    [ ONLY ] %s [ * ] [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "                [ TABLESAMPLE %s ( %s [, ...] ) [ REPEATABLE ( %s ) ] ]\n"
					  "    [ LATERAL ] ( %s ) [ AS ] %s [ ( %s [, ...] ) ]\n"
					  "    %s [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "    [ LATERAL ] %s ( [ %s [, ...] ] )\n"
					  "                [ WITH ORDINALITY ] [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "    [ LATERAL ] %s ( [ %s [, ...] ] ) [ AS ] %s ( %s [, ...] )\n"
					  "    [ LATERAL ] %s ( [ %s [, ...] ] ) AS ( %s [, ...] )\n"
					  "    [ LATERAL ] ROWS FROM( %s ( [ %s [, ...] ] ) [ AS ( %s [, ...] ) ] [, ...] )\n"
					  "                [ WITH ORDINALITY ] [ [ AS ] %s [ ( %s [, ...] ) ] ]\n"
					  "    %s [ NATURAL ] %s %s [ ON %s | USING ( %s [, ...] ) ]\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    ( )\n"
					  "    %s\n"
					  "    ( %s [, ...] )\n"
					  "    ROLLUP ( { %s | ( %s [, ...] ) } [, ...] )\n"
					  "    CUBE ( { %s | ( %s [, ...] ) } [, ...] )\n"
					  "    GROUPING SETS ( %s [, ...] )\n"
					  "\n"
					  "%s\n"
					  "\n"
					  "    %s [ ( %s [, ...] ) ] AS ( %s | %s | %s | %s | %s )\n"
					  "\n"
					  "TABLE [ ONLY ] %s [ * ]",
					  _("with_query"),
					  _("expression"),
					  _("expression"),
					  _("output_name"),
					  _("from_item"),
					  _("condition"),
					  _("grouping_element"),
					  _("condition"),
					  _("window_name"),
					  _("window_definition"),
					  _("select"),
					  _("expression"),
					  _("operator"),
					  _("count"),
					  _("start"),
					  _("count"),
					  _("table_name"),
					  _("where from_item can be one of:"),
					  _("table_name"),
					  _("alias"),
					  _("column_alias"),
					  _("sampling_method"),
					  _("argument"),
					  _("seed"),
					  _("select"),
					  _("alias"),
					  _("column_alias"),
					  _("with_query_name"),
					  _("alias"),
					  _("column_alias"),
					  _("function_name"),
					  _("argument"),
					  _("alias"),
					  _("column_alias"),
					  _("function_name"),
					  _("argument"),
					  _("alias"),
					  _("column_definition"),
					  _("function_name"),
					  _("argument"),
					  _("column_definition"),
					  _("function_name"),
					  _("argument"),
					  _("column_definition"),
					  _("alias"),
					  _("column_alias"),
					  _("from_item"),
					  _("join_type"),
					  _("from_item"),
					  _("join_condition"),
					  _("join_column"),
					  _("and grouping_element can be one of:"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("expression"),
					  _("grouping_element"),
					  _("and with_query is:"),
					  _("with_query_name"),
					  _("column_name"),
					  _("select"),
					  _("values"),
					  _("insert"),
					  _("update"),
					  _("delete"),
					  _("table_name"));
}


const struct _helpStruct QL_HELP[] = {
    { "ABORT",
      N_("abort the current transaction"),
      sql_help_ABORT,
      0 },

    { "ALTER AGGREGATE",
      N_("change the definition of an aggregate function"),
      sql_help_ALTER_AGGREGATE,
      9 },

    { "ALTER COLLATION",
      N_("change the definition of a collation"),
      sql_help_ALTER_COLLATION,
      4 },

    { "ALTER CONVERSION",
      N_("change the definition of a conversion"),
      sql_help_ALTER_CONVERSION,
      2 },

    { "ALTER DATABASE",
      N_("change a database"),
      sql_help_ALTER_DATABASE,
      17 },

    { "ALTER DEFAULT PRIVILEGES",
      N_("define default access privileges"),
      sql_help_ALTER_DEFAULT_PRIVILEGES,
      59 },

    { "ALTER DOMAIN",
      N_("change the definition of a domain"),
      sql_help_ALTER_DOMAIN,
      17 },

    { "ALTER EVENT TRIGGER",
      N_("change the definition of an event trigger"),
      sql_help_ALTER_EVENT_TRIGGER,
      3 },

    { "ALTER EXTENSION",
      N_("change the definition of an extension"),
      sql_help_ALTER_EXTENSION,
      40 },

    { "ALTER FOREIGN DATA WRAPPER",
      N_("change the definition of a foreign-data wrapper"),
      sql_help_ALTER_FOREIGN_DATA_WRAPPER,
      5 },

    { "ALTER FOREIGN TABLE",
      N_("change the definition of a foreign table"),
      sql_help_ALTER_FOREIGN_TABLE,
      34 },

    { "ALTER FUNCTION",
      N_("change the definition of a function"),
      sql_help_ALTER_FUNCTION,
      22 },

    { "ALTER GROUP",
      N_("change role name or membership"),
      sql_help_ALTER_GROUP,
      9 },

    { "ALTER INDEX",
      N_("change the definition of an index"),
      sql_help_ALTER_INDEX,
      9 },

    { "ALTER LANGUAGE",
      N_("change the definition of a procedural language"),
      sql_help_ALTER_LANGUAGE,
      1 },

    { "ALTER LARGE OBJECT",
      N_("change the definition of a large object"),
      sql_help_ALTER_LARGE_OBJECT,
      0 },

    { "ALTER MATERIALIZED VIEW",
      N_("change the definition of a materialized view"),
      sql_help_ALTER_MATERIALIZED_VIEW,
      23 },

    { "ALTER OPERATOR",
      N_("change the definition of an operator"),
      sql_help_ALTER_OPERATOR,
      9 },

    { "ALTER OPERATOR CLASS",
      N_("change the definition of an operator class"),
      sql_help_ALTER_OPERATOR_CLASS,
      7 },

    { "ALTER OPERATOR FAMILY",
      N_("change the definition of an operator family"),
      sql_help_ALTER_OPERATOR_FAMILY,
      19 },

    { "ALTER POLICY",
      N_("change the definition of a row level security policy"),
      sql_help_ALTER_POLICY,
      5 },

    { "ALTER PROCEDURE",
      N_("change the definition of a procedure"),
      sql_help_ALTER_PROCEDURE,
      17 },

    { "ALTER PUBLICATION",
      N_("change the definition of a publication"),
      sql_help_ALTER_PUBLICATION,
      5 },

    { "ALTER ROLE",
      N_("change a database role"),
      sql_help_ALTER_ROLE,
      26 },

    { "ALTER ROUTINE",
      N_("change the definition of a routine"),
      sql_help_ALTER_ROUTINE,
      21 },

    { "ALTER RULE",
      N_("change the definition of a rule"),
      sql_help_ALTER_RULE,
      0 },

    { "ALTER SCHEMA",
      N_("change the definition of a schema"),
      sql_help_ALTER_SCHEMA,
      1 },

    { "ALTER SEQUENCE",
      N_("change the definition of a sequence generator"),
      sql_help_ALTER_SEQUENCE,
      10 },

    { "ALTER SERVER",
      N_("change the definition of a foreign server"),
      sql_help_ALTER_SERVER,
      3 },

    { "ALTER STATISTICS",
      N_("change the definition of an extended statistics object"),
      sql_help_ALTER_STATISTICS,
      2 },

    { "ALTER SUBSCRIPTION",
      N_("change the definition of a subscription"),
      sql_help_ALTER_SUBSCRIPTION,
      7 },

    { "ALTER SYSTEM",
      N_("change a server configuration parameter"),
      sql_help_ALTER_SYSTEM,
      3 },

    { "ALTER TABLE",
      N_("change the definition of a table"),
      sql_help_ALTER_TABLE,
      110 },

    { "ALTER TABLESPACE",
      N_("change the definition of a tablespace"),
      sql_help_ALTER_TABLESPACE,
      3 },

    { "ALTER TEXT SEARCH CONFIGURATION",
      N_("change the definition of a text search configuration"),
      sql_help_ALTER_TEXT_SEARCH_CONFIGURATION,
      12 },

    { "ALTER TEXT SEARCH DICTIONARY",
      N_("change the definition of a text search dictionary"),
      sql_help_ALTER_TEXT_SEARCH_DICTIONARY,
      5 },

    { "ALTER TEXT SEARCH PARSER",
      N_("change the definition of a text search parser"),
      sql_help_ALTER_TEXT_SEARCH_PARSER,
      1 },

    { "ALTER TEXT SEARCH TEMPLATE",
      N_("change the definition of a text search template"),
      sql_help_ALTER_TEXT_SEARCH_TEMPLATE,
      1 },

    { "ALTER TRIGGER",
      N_("change the definition of a trigger"),
      sql_help_ALTER_TRIGGER,
      1 },

    { "ALTER TYPE",
      N_("change the definition of a type"),
      sql_help_ALTER_TYPE,
      12 },

    { "ALTER USER",
      N_("change a database role"),
      sql_help_ALTER_USER,
      26 },

    { "ALTER USER MAPPING",
      N_("change the definition of a user mapping"),
      sql_help_ALTER_USER_MAPPING,
      2 },

    { "ALTER VIEW",
      N_("change the definition of a view"),
      sql_help_ALTER_VIEW,
      6 },

    { "ANALYZE",
      N_("collect statistics about a database"),
      sql_help_ANALYZE,
      9 },

    { "BEGIN",
      N_("start a transaction block"),
      sql_help_BEGIN,
      6 },

    { "CALL",
      N_("invoke a procedure"),
      sql_help_CALL,
      0 },

    { "CHECKPOINT",
      N_("force a write-ahead log checkpoint"),
      sql_help_CHECKPOINT,
      0 },

    { "CLOSE",
      N_("close a cursor"),
      sql_help_CLOSE,
      0 },

    { "CLUSTER",
      N_("cluster a table according to an index"),
      sql_help_CLUSTER,
      1 },

    { "COMMENT",
      N_("define or change the comment of an object"),
      sql_help_COMMENT,
      51 },

    { "COMMIT",
      N_("commit the current transaction"),
      sql_help_COMMIT,
      0 },

    { "COMMIT PREPARED",
      N_("commit a transaction that was earlier prepared for two-phase commit"),
      sql_help_COMMIT_PREPARED,
      0 },

    { "COPY",
      N_("copy data between a file and a table"),
      sql_help_COPY,
      21 },

    { "CREATE ACCESS METHOD",
      N_("define a new access method"),
      sql_help_CREATE_ACCESS_METHOD,
      2 },

    { "CREATE AGGREGATE",
      N_("define a new aggregate function"),
      sql_help_CREATE_AGGREGATE,
      59 },

    { "CREATE CAST",
      N_("define a new cast"),
      sql_help_CREATE_CAST,
      10 },

    { "CREATE COLLATION",
      N_("define a new collation"),
      sql_help_CREATE_COLLATION,
      7 },

    { "CREATE CONVERSION",
      N_("define a new encoding conversion"),
      sql_help_CREATE_CONVERSION,
      1 },

    { "CREATE DATABASE",
      N_("create a new database"),
      sql_help_CREATE_DATABASE,
      9 },

    { "CREATE DOMAIN",
      N_("define a new domain"),
      sql_help_CREATE_DOMAIN,
      8 },

    { "CREATE EVENT TRIGGER",
      N_("define a new event trigger"),
      sql_help_CREATE_EVENT_TRIGGER,
      3 },

    { "CREATE EXTENSION",
      N_("install an extension"),
      sql_help_CREATE_EXTENSION,
      4 },

    { "CREATE FOREIGN DATA WRAPPER",
      N_("define a new foreign-data wrapper"),
      sql_help_CREATE_FOREIGN_DATA_WRAPPER,
      3 },

    { "CREATE FOREIGN TABLE",
      N_("define a new foreign table"),
      sql_help_CREATE_FOREIGN_TABLE,
      29 },

    { "CREATE FUNCTION",
      N_("define a new function"),
      sql_help_CREATE_FUNCTION,
      16 },

    { "CREATE GROUP",
      N_("define a new database role"),
      sql_help_CREATE_GROUP,
      16 },

    { "CREATE INDEX",
      N_("define a new index"),
      sql_help_CREATE_INDEX,
      5 },

    { "CREATE LANGUAGE",
      N_("define a new procedural language"),
      sql_help_CREATE_LANGUAGE,
      2 },

    { "CREATE MATERIALIZED VIEW",
      N_("define a new materialized view"),
      sql_help_CREATE_MATERIALIZED_VIEW,
      5 },

    { "CREATE OPERATOR",
      N_("define a new operator"),
      sql_help_CREATE_OPERATOR,
      6 },

    { "CREATE OPERATOR CLASS",
      N_("define a new operator class"),
      sql_help_CREATE_OPERATOR_CLASS,
      5 },

    { "CREATE OPERATOR FAMILY",
      N_("define a new operator family"),
      sql_help_CREATE_OPERATOR_FAMILY,
      0 },

    { "CREATE POLICY",
      N_("define a new row level security policy for a table"),
      sql_help_CREATE_POLICY,
      5 },

    { "CREATE PROCEDURE",
      N_("define a new procedure"),
      sql_help_CREATE_PROCEDURE,
      8 },

    { "CREATE PUBLICATION",
      N_("define a new publication"),
      sql_help_CREATE_PUBLICATION,
      3 },

    { "CREATE ROLE",
      N_("define a new database role"),
      sql_help_CREATE_ROLE,
      19 },

    { "CREATE RULE",
      N_("define a new rewrite rule"),
      sql_help_CREATE_RULE,
      6 },

    { "CREATE SCHEMA",
      N_("define a new schema"),
      sql_help_CREATE_SCHEMA,
      9 },

    { "CREATE SEQUENCE",
      N_("define a new sequence generator"),
      sql_help_CREATE_SEQUENCE,
      5 },

    { "CREATE SERVER",
      N_("define a new foreign server"),
      sql_help_CREATE_SERVER,
      2 },

    { "CREATE STATISTICS",
      N_("define extended statistics"),
      sql_help_CREATE_STATISTICS,
      3 },

    { "CREATE SUBSCRIPTION",
      N_("define a new subscription"),
      sql_help_CREATE_SUBSCRIPTION,
      3 },

    { "CREATE TABLE",
      N_("define a new table"),
      sql_help_CREATE_TABLE,
      78 },

    { "CREATE TABLE AS",
      N_("define a new table from the results of a query"),
      sql_help_CREATE_TABLE_AS,
      6 },

    { "CREATE TABLESPACE",
      N_("define a new tablespace"),
      sql_help_CREATE_TABLESPACE,
      3 },

    { "CREATE TEXT SEARCH CONFIGURATION",
      N_("define a new text search configuration"),
      sql_help_CREATE_TEXT_SEARCH_CONFIGURATION,
      3 },

    { "CREATE TEXT SEARCH DICTIONARY",
      N_("define a new text search dictionary"),
      sql_help_CREATE_TEXT_SEARCH_DICTIONARY,
      3 },

    { "CREATE TEXT SEARCH PARSER",
      N_("define a new text search parser"),
      sql_help_CREATE_TEXT_SEARCH_PARSER,
      6 },

    { "CREATE TEXT SEARCH TEMPLATE",
      N_("define a new text search template"),
      sql_help_CREATE_TEXT_SEARCH_TEMPLATE,
      3 },

    { "CREATE TRANSFORM",
      N_("define a new transform"),
      sql_help_CREATE_TRANSFORM,
      3 },

    { "CREATE TRIGGER",
      N_("define a new trigger"),
      sql_help_CREATE_TRIGGER,
      14 },

    { "CREATE TYPE",
      N_("define a new data type"),
      sql_help_CREATE_TYPE,
      35 },

    { "CREATE USER",
      N_("define a new database role"),
      sql_help_CREATE_USER,
      19 },

    { "CREATE USER MAPPING",
      N_("define a new mapping of a user to a foreign server"),
      sql_help_CREATE_USER_MAPPING,
      2 },

    { "CREATE VIEW",
      N_("define a new view"),
      sql_help_CREATE_VIEW,
      3 },

    { "DEALLOCATE",
      N_("deallocate a prepared statement"),
      sql_help_DEALLOCATE,
      0 },

    { "DECLARE",
      N_("define a cursor"),
      sql_help_DECLARE,
      1 },

    { "DELETE",
      N_("delete rows of a table"),
      sql_help_DELETE,
      4 },

    { "DISCARD",
      N_("discard session state"),
      sql_help_DISCARD,
      0 },

    { "DO",
      N_("execute an anonymous code block"),
      sql_help_DO,
      0 },

    { "DROP ACCESS METHOD",
      N_("remove an access method"),
      sql_help_DROP_ACCESS_METHOD,
      0 },

    { "DROP AGGREGATE",
      N_("remove an aggregate function"),
      sql_help_DROP_AGGREGATE,
      6 },

    { "DROP CAST",
      N_("remove a cast"),
      sql_help_DROP_CAST,
      0 },

    { "DROP COLLATION",
      N_("remove a collation"),
      sql_help_DROP_COLLATION,
      0 },

    { "DROP CONVERSION",
      N_("remove a conversion"),
      sql_help_DROP_CONVERSION,
      0 },

    { "DROP DATABASE",
      N_("remove a database"),
      sql_help_DROP_DATABASE,
      0 },

    { "DROP DOMAIN",
      N_("remove a domain"),
      sql_help_DROP_DOMAIN,
      0 },

    { "DROP EVENT TRIGGER",
      N_("remove an event trigger"),
      sql_help_DROP_EVENT_TRIGGER,
      0 },

    { "DROP EXTENSION",
      N_("remove an extension"),
      sql_help_DROP_EXTENSION,
      0 },

    { "DROP FOREIGN DATA WRAPPER",
      N_("remove a foreign-data wrapper"),
      sql_help_DROP_FOREIGN_DATA_WRAPPER,
      0 },

    { "DROP FOREIGN TABLE",
      N_("remove a foreign table"),
      sql_help_DROP_FOREIGN_TABLE,
      0 },

    { "DROP FUNCTION",
      N_("remove a function"),
      sql_help_DROP_FUNCTION,
      1 },

    { "DROP GROUP",
      N_("remove a database role"),
      sql_help_DROP_GROUP,
      0 },

    { "DROP INDEX",
      N_("remove an index"),
      sql_help_DROP_INDEX,
      0 },

    { "DROP LANGUAGE",
      N_("remove a procedural language"),
      sql_help_DROP_LANGUAGE,
      0 },

    { "DROP MATERIALIZED VIEW",
      N_("remove a materialized view"),
      sql_help_DROP_MATERIALIZED_VIEW,
      0 },

    { "DROP OPERATOR",
      N_("remove an operator"),
      sql_help_DROP_OPERATOR,
      0 },

    { "DROP OPERATOR CLASS",
      N_("remove an operator class"),
      sql_help_DROP_OPERATOR_CLASS,
      0 },

    { "DROP OPERATOR FAMILY",
      N_("remove an operator family"),
      sql_help_DROP_OPERATOR_FAMILY,
      0 },

    { "DROP OWNED",
      N_("remove database objects owned by a database role"),
      sql_help_DROP_OWNED,
      0 },

    { "DROP POLICY",
      N_("remove a row level security policy from a table"),
      sql_help_DROP_POLICY,
      0 },

    { "DROP PROCEDURE",
      N_("remove a procedure"),
      sql_help_DROP_PROCEDURE,
      1 },

    { "DROP PUBLICATION",
      N_("remove a publication"),
      sql_help_DROP_PUBLICATION,
      0 },

    { "DROP ROLE",
      N_("remove a database role"),
      sql_help_DROP_ROLE,
      0 },

    { "DROP ROUTINE",
      N_("remove a routine"),
      sql_help_DROP_ROUTINE,
      1 },

    { "DROP RULE",
      N_("remove a rewrite rule"),
      sql_help_DROP_RULE,
      0 },

    { "DROP SCHEMA",
      N_("remove a schema"),
      sql_help_DROP_SCHEMA,
      0 },

    { "DROP SEQUENCE",
      N_("remove a sequence"),
      sql_help_DROP_SEQUENCE,
      0 },

    { "DROP SERVER",
      N_("remove a foreign server descriptor"),
      sql_help_DROP_SERVER,
      0 },

    { "DROP STATISTICS",
      N_("remove extended statistics"),
      sql_help_DROP_STATISTICS,
      0 },

    { "DROP SUBSCRIPTION",
      N_("remove a subscription"),
      sql_help_DROP_SUBSCRIPTION,
      0 },

    { "DROP TABLE",
      N_("remove a table"),
      sql_help_DROP_TABLE,
      0 },

    { "DROP TABLESPACE",
      N_("remove a tablespace"),
      sql_help_DROP_TABLESPACE,
      0 },

    { "DROP TEXT SEARCH CONFIGURATION",
      N_("remove a text search configuration"),
      sql_help_DROP_TEXT_SEARCH_CONFIGURATION,
      0 },

    { "DROP TEXT SEARCH DICTIONARY",
      N_("remove a text search dictionary"),
      sql_help_DROP_TEXT_SEARCH_DICTIONARY,
      0 },

    { "DROP TEXT SEARCH PARSER",
      N_("remove a text search parser"),
      sql_help_DROP_TEXT_SEARCH_PARSER,
      0 },

    { "DROP TEXT SEARCH TEMPLATE",
      N_("remove a text search template"),
      sql_help_DROP_TEXT_SEARCH_TEMPLATE,
      0 },

    { "DROP TRANSFORM",
      N_("remove a transform"),
      sql_help_DROP_TRANSFORM,
      0 },

    { "DROP TRIGGER",
      N_("remove a trigger"),
      sql_help_DROP_TRIGGER,
      0 },

    { "DROP TYPE",
      N_("remove a data type"),
      sql_help_DROP_TYPE,
      0 },

    { "DROP USER",
      N_("remove a database role"),
      sql_help_DROP_USER,
      0 },

    { "DROP USER MAPPING",
      N_("remove a user mapping for a foreign server"),
      sql_help_DROP_USER_MAPPING,
      0 },

    { "DROP VIEW",
      N_("remove a view"),
      sql_help_DROP_VIEW,
      0 },

    { "END",
      N_("commit the current transaction"),
      sql_help_END,
      0 },

    { "EXECUTE",
      N_("execute a prepared statement"),
      sql_help_EXECUTE,
      0 },

    { "EXPLAIN",
      N_("show the execution plan of a statement"),
      sql_help_EXPLAIN,
      11 },

    { "FETCH",
      N_("retrieve rows from a query using a cursor"),
      sql_help_FETCH,
      17 },

    { "GRANT",
      N_("define access privileges"),
      sql_help_GRANT,
      65 },

    { "IMPORT FOREIGN SCHEMA",
      N_("import table definitions from a foreign server"),
      sql_help_IMPORT_FOREIGN_SCHEMA,
      4 },

    { "INSERT",
      N_("create new rows in a table"),
      sql_help_INSERT,
      19 },

    { "LISTEN",
      N_("listen for a notification"),
      sql_help_LISTEN,
      0 },

    { "LOAD",
      N_("load a shared library file"),
      sql_help_LOAD,
      0 },

    { "LOCK",
      N_("lock a table"),
      sql_help_LOCK,
      5 },

    { "MOVE",
      N_("position a cursor"),
      sql_help_MOVE,
      17 },

    { "NOTIFY",
      N_("generate a notification"),
      sql_help_NOTIFY,
      0 },

    { "PREPARE",
      N_("prepare a statement for execution"),
      sql_help_PREPARE,
      0 },

    { "PREPARE TRANSACTION",
      N_("prepare the current transaction for two-phase commit"),
      sql_help_PREPARE_TRANSACTION,
      0 },

    { "REASSIGN OWNED",
      N_("change the ownership of database objects owned by a database role"),
      sql_help_REASSIGN_OWNED,
      1 },

    { "REFRESH MATERIALIZED VIEW",
      N_("replace the contents of a materialized view"),
      sql_help_REFRESH_MATERIALIZED_VIEW,
      1 },

    { "REINDEX",
      N_("rebuild indexes"),
      sql_help_REINDEX,
      0 },

    { "RELEASE SAVEPOINT",
      N_("destroy a previously defined savepoint"),
      sql_help_RELEASE_SAVEPOINT,
      0 },

    { "RESET",
      N_("restore the value of a run-time parameter to the default value"),
      sql_help_RESET,
      1 },

    { "REVOKE",
      N_("remove access privileges"),
      sql_help_REVOKE,
      86 },

    { "ROLLBACK",
      N_("abort the current transaction"),
      sql_help_ROLLBACK,
      0 },

    { "ROLLBACK PREPARED",
      N_("cancel a transaction that was earlier prepared for two-phase commit"),
      sql_help_ROLLBACK_PREPARED,
      0 },

    { "ROLLBACK TO SAVEPOINT",
      N_("roll back to a savepoint"),
      sql_help_ROLLBACK_TO_SAVEPOINT,
      0 },

    { "SAVEPOINT",
      N_("define a new savepoint within the current transaction"),
      sql_help_SAVEPOINT,
      0 },

    { "SECURITY LABEL",
      N_("define or change a security label applied to an object"),
      sql_help_SECURITY_LABEL,
      29 },

    { "SELECT",
      N_("retrieve rows from a table or view"),
      sql_help_SELECT,
      42 },

    { "SELECT INTO",
      N_("define a new table from the results of a query"),
      sql_help_SELECT_INTO,
      14 },

    { "SET",
      N_("change a run-time parameter"),
      sql_help_SET,
      1 },

    { "SET CONSTRAINTS",
      N_("set constraint check timing for the current transaction"),
      sql_help_SET_CONSTRAINTS,
      0 },

    { "SET ROLE",
      N_("set the current user identifier of the current session"),
      sql_help_SET_ROLE,
      2 },

    { "SET SESSION AUTHORIZATION",
      N_("set the session user identifier and the current user identifier of the current session"),
      sql_help_SET_SESSION_AUTHORIZATION,
      2 },

    { "SET TRANSACTION",
      N_("set the characteristics of the current transaction"),
      sql_help_SET_TRANSACTION,
      8 },

    { "SHOW",
      N_("show the value of a run-time parameter"),
      sql_help_SHOW,
      1 },

    { "START TRANSACTION",
      N_("start a transaction block"),
      sql_help_START_TRANSACTION,
      6 },

    { "TABLE",
      N_("retrieve rows from a table or view"),
      sql_help_TABLE,
      42 },

    { "TRUNCATE",
      N_("empty a table or set of tables"),
      sql_help_TRUNCATE,
      1 },

    { "UNLISTEN",
      N_("stop listening for a notification"),
      sql_help_UNLISTEN,
      0 },

    { "UPDATE",
      N_("update rows of a table"),
      sql_help_UPDATE,
      8 },

    { "VACUUM",
      N_("garbage-collect and optionally analyze a database"),
      sql_help_VACUUM,
      13 },

    { "VALUES",
      N_("compute a set of rows"),
      sql_help_VALUES,
      4 },

    { "WITH",
      N_("retrieve rows from a table or view"),
      sql_help_WITH,
      42 },


    { NULL, NULL, NULL }    /* End of list marker */
};
