制御構造はおそらくPL/pgSQLのもっとも有用(かつ重要)な部分です。関数からデータを返すために使用できるコマンドが2つあります。expression;式を後に付けたRETURNは関数を終了し、expressionの値を呼出し元に返します。この形式は集合を返さないPL/pgSQL関数で使用されます。スカラ型を返す場合は任意の式を使用することができます。この式の結果は、代入のところで説明したように、自動的に関数の戻り値の型にキャストされます。複合(行)値を返すためには、expressionとしてレコードもしくは行変数を記述しなければなりません。関数の戻り値は未定義とさせたままにすることはできません。制御が、RETURN文が見つからない状態で関数の最上位のブロックの終わりまで達した時、実行時エラーが発生します。voidを返すように関数を宣言した場合でもRETURNを指定する必要があります。この場合RETURNに続く式は省略可能で、あったとしても無視されます。sometypeを返すように宣言した場合、後続の処理が多少違います。NEXTコマンドで指定されます。引数のない最後のRETURNコマンドにより、関数が実行を終了したことが示されます。NEXTは、スカラ型および複合型の両方で使用することができます。複合型の場合、結果の"テーブル"全体が返されます。NEXTを使用する関数は、以下のような形式で呼び出されます。句でテーブルのソースとして使用されなければなりません。式の値を保存しているだけです。関数内の次の文に継続します。コマンドが連続して実行されると、結果集合が作成されます。より、関数の終了を制御します。現在の実装では、関数から返される前に結果集合全体を保管します。関数が非常に大量の結果セットを返した場合、性能が低下する可能性があります。メモリの消耗を避けるため、データはディスクに書き込まれます。関数自体は結果集合全体が生成されるまでは返りません。バージョンでは、この制限を受けずに集合を返す関数をユーザが定義できるようになるかもしれません。設定変数によって制御されています。大量の結果集合を保管するのに十分なメモリがある場合、管理者はこのパラメータの値を大きくすることを考慮すべきです。文はある条件に基づいてコマンドを実行させます。IF;IF-THEN文は、最も単純なIFの形式です。IFの間の文が条件が真の場合に実行されます。なければそれらは飛ばされます。IF;IF-THEN-ELSE文はIF-THENに加え、条件評価が偽の場合に実行すべき文の集合を指定させることができます。IF以下の例のようにIF文は入れ子にすることができます。IF;この形式を使用する場合、実際にIF文を外側のIF文のELSEの部分の内側に入れ子にしています。これにより正常に動作できますが、検査すべき候補が多くある場合は長たらしくなります。その結果、次の形式です。IF;IF-THEN-ELSIF-ELSEは、ある文に多くの代替手段がある場合のチェックに、より便利な方法を提供します。