私は大規模なデータベースを持っており、しばらく検索してもかまいませんが、さまざまな理由でデータベース全体をダンプすることはできません。データベース内のすべてのテーブルのすべてのフィールドで特定のテキスト文字列を検索する、私が作成できる最も簡単なクエリは何ですか?
以下は機能しませんが、私が見たいものを示すはずです:
SELECT * FROM * where * like '%mystring%'
何か案は?
私は大規模なデータベースを持っており、しばらく検索してもかまいませんが、さまざまな理由でデータベース全体をダンプすることはできません。データベース内のすべてのテーブルのすべてのフィールドで特定のテキスト文字列を検索する、私が作成できる最も簡単なクエリは何ですか?
以下は機能しませんが、私が見たいものを示すはずです:
SELECT * FROM * where * like '%mystring%'
何か案は?
tablename.*
PostgreSQL ではテキストにキャストできるという事実を利用できます。
したがって、列のタイプに関係なく、SELECT t.* FROM tablename t WHERE (t.*)::text LIKE '%somestring%'
列に が含まれる行が返されます。somestring
のループで使用される場合、ダンプが必要ないことを除いて、データベース ダンプ内SELECT table_schema, table_name FROM information_schema
の と同等です。grep
SELECT ステートメントは常に結果セットを返します。結果セットは、列名と結果ごとに 1 つの行を持つ一種のテーブルです。
文字列を探しています。そのため、テキスト以外の列をクエリする必要はまったくありません。
select の「from」句を指定する必要があります。すべてのテーブル名について、データベースのメタデータ情報を照会できます。次に、「where」節で使用するテキスト (char、varchar、clob など) のすべての列を取得します。次に、構築された選択を各テーブルに適用します。
このアルゴリズムは、ストアド プロシージャまたは任意のプログラムで表現できます。
データベースのダンプを妨げているのは何ですか? UNIX システムでは、ダンプを「grep」コマンドに直接パイプできます。