Posts tagged PostgreSQL
Mac にインストールした PHP で PostgreSQL が使えなかったので再インストールした
1Mac に PostgreSQL をインストール して、さあ PHP から PostgreSQL を使おうとしたら、PHP で PostgreSQL が使えなかった。pg_connect 関数が未定義と怒られた。
改めて PHP を入れた時のエントリを見直してみると
$ sudo port install php5 +apache2 +mysql5 +pear
確かに入れていない。
(続きを読む…)
Mac に PostgreSQL をインストール
1Mac に MacPorts で PostgreSQL をインストールしてみました。
まず PostgreSQL があるか調べてみる。PostgreSQL8.3 が最新のようです。
$ port search postgresql postgresql7 databases/postgresql7 7.4.21 The most advanced open-source database available anywhere postgresql80 databases/postgresql80 8.0.17 The most advanced open-source database available anywhere postgresql80-doc databases/postgresql80-doc 8.0.17 Documentation for the postgresql database postgresql80-server databases/postgresql80-server 8.0.17 run postgresql80 as server postgresql81 databases/postgresql81 8.1.13 The most advanced open-source database available anywhere postgresql81-doc databases/postgresql81-doc 8.1.13 Documentation for the postgresql database postgresql81-server databases/postgresql81-server 8.1.13 run postgresql81 as server postgresql82 databases/postgresql82 8.2.9 The most advanced open-source database available anywhere postgresql82-doc databases/postgresql82-doc 8.2.9 Documentation for the postgresql database postgresql82-server databases/postgresql82-server 8.2.9 run postgresql82 as server postgresql83 databases/postgresql83 8.3.3 The most advanced open-source database available anywhere. postgresql83-doc databases/postgresql83-doc 8.3.3 Documentation for the postgresql database postgresql83-server databases/postgresql83-server 8.3.3 run postgresql83 as server postgresql_autodoc databases/postgresql_autodoc 1.25 Automatic documentation generator for postgresql databases caml-postgresql devel/caml-postgresql 1.8.2 OCaml-interface to the PostgreSQL-database postgresql-jdbc java/postgresql-jdbc 8.0-311 PostgreSQL JDBC driver py-postgresql-exception python/py-postgresql-exception 0.2 exceptions for the py-postgresql modules py-postgresql-greentrunk python/py-postgresql-greentrunk 0.1 greentrunk interface to postgresql py-postgresql-layout python/py-postgresql-layout 0.3 layout for the py-postgresql modules py-postgresql-pqueue python/py-postgresql-pqueue 0.1 pure python implementation of the pq protocol py-postgresql-proboscis python/py-postgresql-proboscis 0.1 postgresql database connector in pure python
CakePHP 1.2 の deleteAll
1CakePHP 1.2 の saveAll その1
CakePHP 1.2 の saveAll その2
のエントリーを書いているときに deleteAll というメソッドがあり気になったので調べてみました。
CakePHP 1.1 で開発時に delete するときに ID を指定するしか方法がなく、ある条件でまとめて削除したいときなどは findAll してからループで delete していました。このときも条件を指定して削除する方法がないかとソースを調べたのですがありませんでした。
使い方は非常に簡単です。findAll のように条件を指定して deleteAll を実行するだけです。
$conditions = array('User.name'=>'suzuki'); if ($this->User->deleteAll($conditions)) { $this->Session->setFlash('削除しました'); } else { $this->Session->setFlash('削除に失敗しました'); }
実行される SQL は以下のような感じです。
SELECT `User`.`id` FROM `users` AS `User` WHERE `User`.`name` = 'suzuki' DELETE `User` FROM `users` AS `User` WHERE `User`.`id` IN (8, 10)
SELECT で条件に合う ID を抽出して WHERE IN で DELETE しています。
ただし CakePHP1.2 の削除ですが、MySQL 4.0 では SQL の DELETE 文でエラーになってしまいます。
MySQL 5.0 ではエラーにならずに削除できました。エラーになる原因は “DELETE” の後ろにテーブルのエイリアス名があるためです。
これは “cakephp1.2でのPostgreSQLエラー。” フォーラム – CakePHP Users in Japan でもあるように既に修正されているようですが、昨日 CakePHP のサイトからダウンロードした CakePHP 1.2.0.6311 beta ではまだ修正されていないようです。
PostgreSQL のバックアップとリストア
1PostgreSQL のバックアップとリストア方法のメモ
postgres ユーザになる
$ su - postgres
パスワードを設定していれば聞かれるので入力する。(当然ですが)
データのバックアップ
$ pg_dump DATABASE_NAME > BACKUP_FILENAME
データのリストア
$ psql -e DATABASE_NAME < BACKUP_FILENAME
データベースの作成
$ createdb DATABASE_NAME
データベースの削除
$ dropdb DATABASE_NAME
phpPgAdmin でログインできない
0普段は MySQL ばかり使用しているのですが、PostgreSQL を使用する必要があり、phpPgAdmin を使うことにした。
開発用のサーバには phpPgAdmin がインストールされているが、ブラウザで閲覧できるようにはまだしていなかった。
Open Tech Press | phpPgAdmin:Web開発者向けのPostgresクライアントツール を参考に /usr/share/phpPgAdmin にインストールされている phpPgAdmin をブラウザでアクセス可能にした。
/etc/http/conf/httpd.conf に下記を追加
Alias /phppgadmin /usr/share/phppgadmin/ <DirectoryMatch /usr/share/phppgadmin/> Options +FollowSymLinks AllowOverride None order deny,allow deny from all allow from localhost </DirectoryMatch>
これでブラウザから http://example.com/phpPgAdmin/ でアクセスできるようになった。
しかし、PostgreSQL のユーザでログインしようとするとエラーになる。
これは シン石丸の電脳芸事ニッキ: debian 3.1へのphppgadminのインストール後の設定 を参考にして解決。
/etc/postgresql/pg_hba.conf に下記を追加
host all all 127.0.0.1 255.255.255.255 trust
これで無事 phpPgAdmin にログインできました。
ランダムに抽出する SQL
4ランダムに10件 SELECT する SQL です。
ORDER BY RAND() でランダムにソートして LIMIT 句で取得したい件数だけ取得します。
SELECT * FROM table ORDER BY RAND() LIMIT 10;
ランダム関数は MySQL, PostgreSQL, SQLServer で使用できます。
ランダム関数は
MySQL, SQLServer は RAND()
PostgreSQL は RANDOM()
です。