generate_subscripts は「セットを返す関数」であり、呼び出すと複数の行が返されます。そのため、最も頻繁に FROM 句に入れられます。
デフォルトでは、Postgres に組み込まれている generate_subscripts からの結果は匿名であり、残りのクエリで参照するためにハンドルとして使用する名前が自動的に付けられます。これが g(i) です。これは、generate_subscripts によって返されるテーブル (g) と列 (i) のエイリアスです。したがって、この表現:
FROM generate_subscripts($1, 1) g(i)
意味:
関数 generate_subscripts を実行し、その結果を「i」という単一の列を持つ「g」というテーブルに割り当てます
またはSQL形式で:
CREATE TABLE g ( i integer );
INSERT INTO g SELECT * FROM generate_subscripts(some_array, 1);
SELECT i FROM g ORDER BY i;
そのエイリアスがないと、クエリの SELECT 部分は、generate_subscripts によって生成された結果を参照する方法がわかりません。
g(i) と gs(i) の使用は、Postgres の世界の慣例です。「g」または「gs」は「generate_series」または「generate_subscripts」を表します。「i」は「反復子」の従来のプログラミング変数です。実際には任意のエイリアスを使用できます。将来のコード メンテナンスを改善するために、実行しようとしているものを実際に参照するエイリアスを使用することをお勧めします。例えば:
FROM generate_subscripts( $1, 1 ) as features(feature_no)
これらの関数の詳細は PostgreSQL ドキュメントに記載されています。また、セットを返す関数の記述方法についてドキュメントを参照することも役立ちます(35.4.8. セットを返す SQL 関数までスクロールします)。自分で作成すると、その結果を参照するためにエイリアスが必要な理由が明確になります。