psqlではクエリを書いている途中でタブを押すとテーブル名等が補完されます。
例えば以下のとおりです。
ap2=# SELECT * FROM game game_banner_getchu_widesky gamegrouplist gamelist_masterup_update_id_seq game_banner_getchu_widesky_id_seq gamegrouplist_id_seq gamelist_sellday_update game_music gamelist gamelist_sellday_update_id_seq game_store_sp gamelist_id_seq game_store_sp_id_seq gamelist_masterup_update
PostgreSQLを以下の設定にすると、タブを押したときにどのように補完候補が抽出されているかのクエリが表示されます。
postgresql.conf
log_statement = 'all' client_min_messages = log
SELECT * FROM gameli LOG: statement: SELECT pg_catalog.quote_ident(c.relname) FROM pg_catalog.pg_class c WHERE c.relkind IN ('r', 'S', 'v', 'm', 'f', 'p') AND substring(pg_catalog.quote_ident(c.relname),1,6)='gameli' AND pg_catalog.pg_table_is_visible(c.oid) AND c.relnamespace <> (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = 'pg_catalog') UNION SELECT pg_catalog.quote_ident(n.nspname) || '.' FROM pg_catalog.pg_namespace n WHERE substring(pg_catalog.quote_ident(n.nspname) || '.',1,6)='gameli' AND (SELECT pg_catalog.count(*) FROM pg_catalog.pg_namespace WHERE substring(pg_catalog.quote_ident(nspname) || '.',1,6) = substring('gameli',1,pg_catalog.length(pg_catalog.quote_ident(nspname))+1)) > 1 UNION SELECT pg_catalog.quote_ident(n.nspname) || '.' || pg_catalog.quote_ident(c.relname) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n WHERE c.relnamespace = n.oid AND c.relkind IN ('r', 'S', 'v', 'm', 'f', 'p') AND substring(pg_catalog.quote_ident(n.nspname) || '.' || pg_catalog.quote_ident(c.relname),1,6)='gameli' AND substring(pg_catalog.quote_ident(n.nspname) || '.',1,6) = substring('gameli',1,pg_catalog.length(pg_catalog.quote_ident(n.nspname))+1) AND (SELECT pg_catalog.count(*) FROM pg_catalog.pg_namespace WHERE substring(pg_catalog.quote_ident(nspname) || '.',1,6) = substring('gameli',1,pg_catalog.length(pg_catalog.quote_ident(nspname))+1)) = 1 LIMIT 1000;
このSQLを実行してみると以下の結果が得られます。
quote_ident --------------------------------- gamelist_sellday_update gamelist gamelist_sellday_update_id_seq gamelist_masterup_update_id_seq gamelist_id_seq gamelist_masterup_update (6 行)
補完候補ってクエリで抽出していたんだなあ…とちょっと感動したのでメモしておきます。