GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO role_specification [, ...] [ WITH GRANT OPTION ]
Relevant Extract:
"ALL TABLES IN SCHEMA schema_name [, ...]"
Correct Usage:
"ALL TABLES IN SCHEMA public, api_v1"
Incorrect Usage:
"ALL TABLES IN SCHEMA public, ALL TABLES IN SCHEMA api_v1"
Variant B:
GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { { FUNCTION | PROCEDURE | ROUTINE } routine_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...] | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] } TO role_specification [, ...] [ WITH GRANT OPTION ]
Relevant Extract:
"( [ [ argmode ] [ arg_name ] arg_type [, ...] ] )"
Correct Usage:
"( first_param TEXT, second_param TEXT )"
Incorrect Usage:
"( first_param TEXT, TEXT)"
--
So in Variant A, "[, ...]" is intended to apply to the immediately preceding token but in variant B it is intended to apply to all preceding tokens in the same group.
Thank you,
Oliver