Posts tagged PostgreSQL

Mac にインストールした PHP で PostgreSQL が使えなかったので再インストールした

1

Mac に PostgreSQL をインストール して、さあ PHP から PostgreSQL を使おうとしたら、PHP で PostgreSQL が使えなかった。pg_connect 関数が未定義と怒られた。

改めて PHP を入れた時のエントリを見直してみると

$ sudo port install php5 +apache2 +mysql5 +pear

確かに入れていない。
(続きを読む…)

Mac に pgAdmin をインストール

1

昨日、Mac に PostgreSQL をインストールしたので、ついでに pgAdmin もインストールしてみた。


(続きを読む…)

Mac に PostgreSQL をインストール

1

Mac に 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

1

CakePHP 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 のバックアップとリストア

1

PostgreSQL のバックアップとリストア方法のメモ

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()
です。

Go to Top