index 2afee6d7b59b55d7f2965aaeeb2acba08477b185..1cebc03d15e0c0852351bf36dc0c651ba52ed8ca 100644 (file)
</para>
<para>
- Only superusers can call <command>CHECKPOINT</command>.
+ Only superusers or users with the privileges of
+ the <link linkend="predefined-roles-table"><literal>pg_checkpointer</literal></link>
+ role can call <command>CHECKPOINT</command>.
</para>
</refsect1>
index afbf67c28cfadbd4280890e240d58dd9e0d964d5..9067be1d9c7811d061ac87923e973ced73480f7c 100644 (file)
<entry>Allow executing programs on the database server as the user the database runs as with
COPY and other functions which allow executing a server-side program.</entry>
</row>
+ <row>
+ <entry>pg_checkpointer</entry>
+ <entry>Allow executing
+ the <link linkend="sql-checkpoint"><command>CHECKPOINT</command></link>
+ command.</entry>
+ </row>
</tbody>
</tgroup>
</table>
index bf085aa93b2055012a8adb9f34265c3f91e8133c..1fbc387d471a10cc61f33d65353647bc9ec069fa 100644 (file)
#include "catalog/catalog.h"
#include "catalog/index.h"
#include "catalog/namespace.h"
+#include "catalog/pg_authid.h"
#include "catalog/pg_inherits.h"
#include "catalog/toasting.h"
#include "commands/alter.h"
break;
case T_CheckPointStmt:
- if (!superuser())
+ if (!has_privs_of_role(GetUserId(), ROLE_PG_CHECKPOINTER))
ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
- errmsg("must be superuser to do CHECKPOINT")));
+ errmsg("must be superuser or have privileges of pg_checkpointer to do CHECKPOINT")));
RequestCheckpoint(CHECKPOINT_IMMEDIATE | CHECKPOINT_WAIT |
(RecoveryInProgress() ? 0 : CHECKPOINT_FORCE));
index 9faf017457adcacf47e664753a368a29edde09fc..49e8e5912907b862e460092c54cbf4820aa7c8d0 100644 (file)
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 202110272
+#define CATALOG_VERSION_NO 202111091
#endif
index 3da68016b61ea9e24572f51bfdb6a0f08b541645..9c65174f3c61a715362f72e9946b61e059be975b 100644 (file)
rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
rolpassword => '_null_', rolvaliduntil => '_null_' },
+{ oid => '4544', oid_symbol => 'ROLE_PG_CHECKPOINTER',
+ rolname => 'pg_checkpointer', rolsuper => 'f', rolinherit => 't',
+ rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
+ rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
+ rolpassword => '_null_', rolvaliduntil => '_null_' },
]