Postgresql historicamente não suporta código procedural no nível de comando - apenas dentro de funções. No entanto, no Postgresql 9, foi adicionado suporte para executar um bloco de código embutido que efetivamente suporta algo assim, embora a sintaxe seja um pouco estranha e haja muitas restrições em comparação com o que você pode fazer com o SQL Server. Notavelmente, o bloco de código embutido não pode retornar um conjunto de resultados, portanto, não pode ser usado para o que você descreve acima.
Em geral, se você quiser escrever algum código procedural e fazer com que ele retorne um resultado, você precisa colocá-lo dentro de uma função. Por exemplo:
CREATE OR REPLACE FUNCTION somefuncname() RETURNS int LANGUAGE plpgsql AS $$
DECLARE
one int;
two int;
BEGIN
one := 1;
two := 2;
RETURN one + two;
END
$$;
SELECT somefuncname();
O protocolo de conexão do PostgreSQL, até onde eu sei, não permite coisas como um comando retornando vários conjuntos de resultados. Portanto, você não pode simplesmente mapear lotes T-SQL ou procedimentos armazenados para funções do PostgreSQL.