corserverでデータベースを使用するときの注意点
バス釣り用のロッド・リールの組み合わせを検索できるサイトを構築したのですが、
久々にデータベースを使ったのもあって、
ちょいちょい初歩的な部分で躓くことがあり、
忘れないための自分メモ。
【サーバー 】 coreserver
【言語】 perl
【データベース】 postgresql
テーブル名に大文字は使うな
例えば、「Table1」という大文字を含むテーブル名があった場合の以下のSQL文。
SELECT * FROM Table1_list
これでは動かない。
SELECT * FROM "Table1_list"
と、”(ダブルクォート)で囲む必要がある。
ところが、これでは以下の様にプレースホルダを使用した時に厄介。
エスケープしても動かなかった。
my $sth = $dbh->prepare("SELECT * FROM \"Table1_list\" WHERE no = ?"); $sth->execute(1);
なので、テーブル名を「Table1_list」→「table1_list」と、
大文字から小文字に修正してあげる方が根本的な解決方法として最善。
エクスポートが出来ない
phpMyAdminを利用して、データベースデータのエクスポートを試みるが、
下記のエラーが表示され上手くいかない。
Export error: Failed to execute pg_dump (given path in your conf/config.inc.php : /usr/local/pgsql/bin/pg_dump).
Please, fix this path in your configuration and relog.
そこで、サーバー管理会社(coreserver/valuedomain)に問い合わせてみると、
「conf/config.inc.php のpg_dumpのパス設定を以下に書き換えろ」との事。
デフォルトでは、 $conf['servers'][0]['pg_dump_path'] = '/usr/bin/pg_dump'; $conf['servers'][0]['pg_dumpall_path'] = '/usr/bin/pg_dumpall'; となっているので、 $conf['servers'][0]['pg_dump_path'] = '/usr/local/bin/pg_dump'; $conf['servers'][0]['pg_dumpall_path'] = '/usr/local/bin/pg_dumpall'; か、もしくは $conf['servers'][0]['pg_dump_path'] = '/usri/local/pgsql/bin/pg_dump'; $conf['servers'][0]['pg_dumpall_path']= '/usr/local/pgsql/bin/pg_dumpall'; に変更するとエクスポートできるようになります
この方法については、他サイトで記事にしてあったので知ってはいたのだが、
レンタルサーバーじゃ「conf/config.inc.php」には入れてくれないだろと思い込んでいた。
しかし、FFFTPで接続して探してみたら、ありました。
正確なパスは、こう↓
/public_html/log/phppgadmin/conf/config.inc.php
さっそく書き換えてみるが、うまくいかない。
再度、問い合わせると、今度は「.htaccessファイルを設置した」との事。
これでうまくいった。
探ってみると、「/public_html/log/phppgadmin/.htaccess」に設置してありました。
.htaccessの内容は、以下の一文。
AddHandler application/x-httpd-phpcgi .php
元々、coreserver/valuedomainでは、PHPはCGIモードで動かす必要がある為、
Wordpress等で画像アップロードを使うには、
この一行を記載した「.htaccess」を設置する必要があるのだが、
同じように必要だったみたい。
CSVインポートする際は「”(ダブルクォート)」で囲む
エクセルでデータを作成してインポートを試みたのだが、うまくいかない。
原因は、「要素を”(ダブルクォート)」で囲んでいなかったからだった。
しかし、エクセルにはそのような機能はないので、
自分でプログラムを組むか、ソフトを使用する必要がある。
私は、「Cassava Editor」を使用しました。
使い方は以下の通り。
[Cassava.exe]を起動し、
[オプション]-[オプション]-[全てのセルを”で囲む]にチェックし、
保存すればOKです。
あとは、そのデータをphpMyAdminでインポートしましょう。
まったく同じ問題に遭遇してこちらに辿り着きました。
こちらに記載の方法をすべて試してみても解決できなかったので、value-domainのサポートに解決方法を問い合わせてみたところ、サーバのDBを「 PostgreSQL 8.2.4 」にアップグレードしていただき、( config.inc.php )はデフォルトのままでDB操作(エキスポートなど)できるようになりました。
ご報告まで。