Calender
Sun Mon Tue Wed Thu Fri Sat
1234567
891011121314
15161718192021
22232425262728
2930     
<< September 2019 >>
広告
SEARCH

SELECTED ENTRIES
RECENT COMMENTS
RECENT TRACKBACK
CATEGORIES
ARCHIVES
LINKS
PROFILE
OTHERS
SKYPE
PC: skype.jojo.jp
chat
iPad: iphone.jojo.jp
chat call
THANKS



本日:
昨日:
多言語
広告
 ▼▲ 作業日報 ▼△
    What's under the hood?
<< Facebook タグ付け解除の方法 | main | slickgrid のajaxデータ取得時 json_encode() には注意 >>
drupal7 データエクスポート、インポートメモ
データのエクスポートをdrush sql-cliにて行う方法、仕組みの理解と方法。
基本的にDrupalのデータ(コンテンツ)(node)は node,node_revision テーブルに入る。
又コンテンツタイプ毎に追加された情報は追加フィールドは名称(例:XXXX項目)ごとに*別テーブル*「field_data_XXXX」に入れられる。この際field_revision_XXXXというテーブルも同時に作成されるが、これはバージョン管理用のようで特にデータを削除しても問題ないと思われる。


上記2+フィールド数分のテーブル同期させた状態でエクスポート、インポートすることによりデータの書き出しと復元が可能となる。
問題はノードデータの個々のフィールドをテーブルに分散させていることである。

コンテンツタイプABCはAAAAとBBBBとCCCCという項目を新たに持っている場合、コンテンツタイプABCは
node
node_revision
field_data_body
field_data_AAAA
field_data_BBBB
field_data_CCCC というデータに格納されることになる。
(実際にはフィールドを追加する場合 _field_プリフィックスが付くためテーブル名は field_data_field_AAAAなどとなる)field_revision_AAAA,field_revision_BBBB,field_revision_CCCC,などが作られるがこれらは 登録時に再生性されるため、削除してもかまわないようだ
注意が必要なテーブルとして、sqlite_sequenceの node 値がある、この値+1が新たなノードのnidとする必要がある。 ただ、ノードを削除した場合は テーブルnodeのnid値に自動的に更新されており、インポートした場合も自動的に最大の値が保持されるようなので特にこのテーブルの値は触る必要はない。

実際の作業は、drush sql-cli にてエクスポート時は .output [出力ファイル名]
.mode tabs [テーブル名]
select * from [テーブル名]
とし、インポート時は
delete from [テーブル名];
delete from [revisionテーブル名];
.mode tabs
.import [ファイル名] [テーブル名]
とする
ただし、上記ではタブ文字が入っていたりすると適切にエスケープされずエラーとなル場合があった為、 エクスポートモードはSQLにて出したようが良いかもしれなない
.mode insert として 出力
インポート時に
.read [ファイル名]
とするのが無難かと思われる。
| - | 18:06 | comments(0) | trackbacks(0) |









http://blog.jojo.jp/trackback/1424934