обо всём понемногу...

Создать пользователя с паролем:
psql --username=postgres --host=${srv_list[${srv}]} -c "CREATE USER ${users_priv[${i}]} WITH PASSWORD '${pw_users_priv[${i}]}';"

Изменить пароль пользователя:
psql --username=postgres --host=${srv_list[${srv}]} -c "ALTER USER ${users_priv[${i}]} PASSWORD '${pw_users_priv[${i}]}';"

Выдать права пользователю:
psql --username=postgres --host=${srv_list[${srv}]} -c "GRANT CONNECT ON DATABASE ${work_db} TO ${users_priv[${i}]};"
psql --username=postgres --host=${srv_list[${srv}]} -c "GRANT USAGE ON SCHEMA public TO ${users_priv[${i}]};"
psql --username=postgres --host=${srv_list[${srv}]} -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ${users_priv[${i}]};"
psql --username=postgres --host=${srv_list[${srv}]} -d ${work_db} -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ${users_priv[${i}]};"

Посмотреть права пользователя username:
select * from information_schema.role_table_grants where grantee='username';

Показать список пользователей:
\du

Показать список баз:
\l

Следующий запрос показывает 20 запросов, занимающих много времени:

SELECT substring(query, 1, 50) AS short_query, round(total_time::numeric, 2) AS total_time, calls, round(mean_time::numeric, 2) AS mean, round((100 * total_time / sum(total_time::numeric) OVER ())::numeric, 2) AS percentage_cpu FROM pg_stat_statements ORDER BY total_time DESC LIMIT 20;