To be quite clear, that always felt weird to me as well - something to the effect of "I thought SELECT was for reading data; why am I using it to create a replica?"
DO $$ BEGIN
PERFORM rebalance_table_shards();
END $$;
SELECT is a bit like return?
return 6;
or
return x++;
or even
return (exit(0));
I think GP is saying they view SELECT as a "pure" function. A pure function doesn't modify state, so neither should SELECT.
Yeah, from limited experience with SQL "SELECT is safe" (assuming no weirdness in sub functions or commands) but that's clearly not always the case.