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