コマンドを使用してSQLにダンプされるデータベースがあり、たとえばcreate table
テーブルを削除するなど、特定のオブジェクトに指定されたコマンドを適用するスクリプトを作成する必要があります。
たとえば、テーブルを削除する場合は、で始まる行をスキャンし、create table
コマンドを使用して3番目のフィールドを抽出しますcut
。次に、各出力行の前にdrop table
followcascade;
やその他の適切なコマンドなどのコマンドを追加したいと思います。
今私が使用している命令はですcat datadump.sql | cut -d ' ' -f 1-3 | grep 'CREATE TABLE' | uniq | cut -d ' ' -f 3
。
すると、次のようなリストが出力されます。
table1
table2
table3
私に変換したい
drop table table1 cascade;
drop table table2 cascade;
などをファイルとして保存し、必要に応じて実行できます。実際、プレフィックスとサフィックスが入力に応じて条件になりたいのですが、今は単純なリテラルテキストで十分です。
以下は、コメントで要求されたいくつかの入力例です。
CREATE TABLE agency (
agrecordid integer DEFAULT nextval(('agency0_pk_seq'::text)::regclass) NOT NULL,
agidcode1 character(20) NOT NULL,
...,
...,
agaddress1 character(40),
agtown character(40),
agfax2 character(20),
agemail character(20)
);
CREATE TABLE agency_contact (
recordid integer DEFAULT nextval(('agencon0_pk_seq'::text)::regclass) NOT NULL,
agencyid integer,
name character varying(35),
...,
...,
email2 character varying(30),
deptorperson character(1),
notes text
);
答え1
Awkを使用(そして出力をキャプチャすると仮定)はい3番目のフィールド):
awk '/CREATE TABLE/ {printf "%s\n", "drop table "$3" cascade;"}' datadump.sql
drop table agency cascade;
drop table agency_contact cascade;