読者です 読者をやめる 読者になる 読者になる

PostgreSQLとPHPでAutocompleteを作る Part 1

今回はskillsという名前のMySQLSQLファイルを変換してPostgreSQL用にダンプファイルを作成します。 (これがなかなか時間かかりました......) それについても書きたいと思います。

※最近まで手順がばらばらのまま記事を掲載しておりました。お詫びいたします。また初心者にもわかりやすいように言い回しがくどい箇所があるかもしれません。ご了承ください。

SQLファイルはこちら

emacsなどにコピーした後にファイルの拡張子を.sqlにしてください。

https://drive.google.com/file/d/0B7YeptbCjhpaTVRoN3VMTjI4eW8/view?usp=sharing

MySQLでデータベースを作成する

はじめにMySQLを起動(ここではmysqlをインストールした前提になります)

mysql> show databases;

すると以下のようになると思います。(個人の環境によって違う場合もあります)

f:id:yuki_net:20161005182506p:plain

MySQLでcreate databaseする。今回はskillsというデータベースを作ります。(このときcreate databaseしないで次に進めばUnknown databaseとなるので注意。)

mysql> create database skills; 

もう一度show database;として、skillsというデータベースが作成されていることを確認してください。

f:id:yuki_net:20161005182544p:plain

MySQLにデータを格納します。

mysql -u root -D mysql -p < skills.sql

いったんexitとしたいところですが、ここでテーブルも作っておかないと

f:id:yuki_net:20161205203252j:plain

このように表示されてしまいます。ということでMySQLでテーブルを定義しましょう。

f:id:yuki_net:20161205203500j:plain

sqlファイルをリダイレクトしてデータベースに格納します。

stnet@m1:$ mysql -u root -D skills -p < skills.sql 

MySQLからPostgreSQL用のファイルに変換する

ファイルがある場所でダンプコマンドを実行します。今回はdatabase_nameとtable_name、filenameをskillsとします。

mysqldump -uroot -p database_name --compatible=postgresql  -t -c --skip-quote-names --skip-extended-insert --skip-add-locks --default-character-set=utf8 table_name  | sed "s/\\\'/\'\'/g" >  dump-filename.sql 

PostgreSQLでcreate databaseする。今回はskillsというデータベースを作ります。

stnet@m1:$ sudo -i -u postgres
[sudo] password for {usename}:
postgres@m1:~$ psql
psql (9.5.5)
Type "help" for help.

postgres=# create database skills; 

今回の目的はダンプしたdump-skills.sqlPostgreSQLのデータベースに格納したいのでMySQLと同様にPostgreSQLでもCREATE DATABASEしましょう。続けてテーブルも作らないと以下のようなエラーになります。

Password for user postgres:
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (1,'ActionScript');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (2,'AppleScript');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (3,'Asp');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (4,'Basic');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (5,'C');
                    ^
ERROR: relation "skills" does not exist
LINE 1: INSERT INTO skills (id, skill) VALUES (6,'C++');
                    ^
                    .
                    .
                    .
                    .
                    

ということでPostgreSQLでテーブルを作成

f:id:yuki_net:20161007192050p:plain

変換したファイルでPostgreSQLのデータベースを作成する

stnet@m1:$ psql -U postgres -d skills < dump-skills.sql 

をすると

f:id:yuki_net:20161005192756j:plain

INSERT 0 1 というのが続けばデータの格納がうまくいっています。

selectを使ってskillsデータベースを確認してみましょう。ここまででautocompleteの下準備が出来上がりました。

stnet@m1:$ sudo -i -u postgres
postgres@m1:$ psql skills
Password: 
psql (9.5.4)
Type "help" for help.

skills=# select * from skills;

f:id:yuki_net:20161005193326p:plain

次回はPHPファイルを作ってPostgreSQLとconnectし、Autocompleteを実現について描いていきたいと思います。