3

私は大規模なデータベースを持っており、しばらく検索してもかまいませんが、さまざまな理由でデータベース全体をダンプすることはできません。データベース内のすべてのテーブルのすべてのフィールドで特定のテキスト文字列を検索する、私が作成できる最も簡単なクエリは何ですか?

以下は機能しませんが、私が見たいものを示すはずです:

 SELECT * FROM * where * like '%mystring%'

何か案は?

4

2 に答える 2

9

tablename.*PostgreSQL ではテキストにキャストできるという事実を利用できます。

したがって、列のタイプに関係なく、SELECT t.* FROM tablename t WHERE (t.*)::text LIKE '%somestring%'列に が含まれる行が返されます。somestring

のループで使用される場合、ダンプが必要ないことを除いて、データベース ダンプ内SELECT table_schema, table_name FROM information_schemaの と同等です。grep

于 2013-06-14T15:42:38.957 に答える
5

SELECT ステートメントは常に結果セットを返します。結果セットは、列名と結果ごとに 1 つの行を持つ一種のテーブルです。

文字列を探しています。そのため、テキスト以外の列をクエリする必要はまったくありません。

select の「from」句を指定する必要があります。すべてのテーブル名について、データベースのメタデータ情報を照会できます。次に、「where」節で使用するテキスト (char、varchar、clob など) のすべての列を取得します。次に、構築された選択を各テーブルに適用します。

このアルゴリズムは、ストアド プロシージャまたは任意のプログラムで表現できます。

データベースのダンプを妨げているのは何ですか? UNIX システムでは、ダンプを「grep」コマンドに直接パイプできます。

于 2013-06-14T13:33:24.053 に答える