Postgres でのデータ変更時の可視性規則は以下の 通りです。問い合わせの実行中、その問い合わせ自身によって(SQL 関数、 SPI 関数、トリガ経由で)なされたデータの変更はその問い合わせの スキャンからは不可視となります。例えば、 INSERT INTO a SELECT * FROM a という問い合わせでは、挿入されたタプルは SELECT スキャンからは不可視となります。 このため、この問い合わせはデータベースのテーブルを再帰処理することなく (もちろん、一意性インデックス規則にしたがって)二重化します。
問い合わせ Q によりなされる変更は、問い合わせ Q の後に開始した問い合わせに 対しては可視です。この問い合わせが Q の内側で( Q の実行中に)開始された のか、Q の実行が終ってから開始されたのかについては問いません。