diff --git a/doc/src/sgml/sources.sgml b/doc/src/sgml/sources.sgml
index 25e7763c7c7..32ca2201b85 100644
--- a/doc/src/sgml/sources.sgml
+++ b/doc/src/sgml/sources.sgml
@@ -511,7 +511,7 @@ Hint: the addendum
There are functions in the backend that will double-quote their own output
- at need (for example, format_type_be()). Do not put
+ as needed (for example, format_type_be()). Do not put
additional quotes around the output of such functions.
@@ -880,7 +880,7 @@ BETTER: unrecognized node type: 42
practices.
- Features from later revision of the C standard or compiler specific
+ Features from later revisions of the C standard or compiler specific
features can be used, if a fallback is provided.
diff --git a/src/backend/access/transam/README.parallel b/src/backend/access/transam/README.parallel
index 85e5840feba..99c588d6dcb 100644
--- a/src/backend/access/transam/README.parallel
+++ b/src/backend/access/transam/README.parallel
@@ -169,7 +169,7 @@ differently because of them. Right now, we don't even allow that.
At the end of a parallel operation, which can happen either because it
completed successfully or because it was interrupted by an error, parallel
workers associated with that operation exit. In the error case, transaction
-abort processing in the parallel leader kills of any remaining workers, and
+abort processing in the parallel leader kills off any remaining workers, and
the parallel leader then waits for them to die. In the case of a successful
parallel operation, the parallel leader does not send any signals, but must
wait for workers to complete and exit of their own volition. In either
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index aba39604811..58800542454 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -4291,7 +4291,7 @@ ts_ckpt_progress_comparator(Datum a, Datum b, void *arg)
*
* *max_pending is a pointer instead of an immediate value, so the coalesce
* limits can easily changed by the GUC mechanism, and so calling code does
- * not have to check the current configuration. A value is 0 means that no
+ * not have to check the current configuration. A value of 0 means that no
* writeback control will be performed.
*/
void
diff --git a/src/backend/storage/sync/sync.c b/src/backend/storage/sync/sync.c
index 9cb7c650331..8282a476b41 100644
--- a/src/backend/storage/sync/sync.c
+++ b/src/backend/storage/sync/sync.c
@@ -216,7 +216,7 @@ SyncPostCheckpoint(void)
/*
* As in ProcessSyncRequests, we don't want to stop absorbing fsync
- * requests for along time when there are many deletions to be done.
+ * requests for a long time when there are many deletions to be done.
* We can safely call AbsorbSyncRequests() at this point in the loop
* (note it might try to delete list entries).
*/
diff --git a/src/include/access/tableam.h b/src/include/access/tableam.h
index 5a663975b9f..91f84b11078 100644
--- a/src/include/access/tableam.h
+++ b/src/include/access/tableam.h
@@ -1199,7 +1199,7 @@ table_tuple_complete_speculative(Relation rel, TupleTableSlot *slot,
* operation. That's often faster than calling table_insert() in a loop,
* because e.g. the AM can reduce WAL logging and page locking overhead.
*
- * Except for taking `nslots` tuples as input, as an array of TupleTableSlots
+ * Except for taking `nslots` tuples as input, and an array of TupleTableSlots
* in `slots`, the parameters for table_multi_insert() are the same as for
* table_tuple_insert().
*