」というタグがついている記事一覧

mysql の utf8_general_ci と utf8_unicode_ci の混在でエラー

Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=’

というエラーがでてた。

なんだ?と思ったら同じDBにutf8_general_ci と utf8_unicode_ci のテーブルが混在してて、クエリで接続してた。

Geeklog1.4.0, 1.4.1,1.5.0,1.5.1からGeeklog1.5.2にアップグレードする方法によると
utf8_unicode_ciにすると,~や機種依存文字の①②がすべて ? に置き換わってしまいます。
ということなのでutf8_general_ciに統一した。

※今回の問題とgeeklogとは全く関係なし。たまたま上記サイトを見つけただけ。

タグ
コメントはありません。 »

PostgreSQL8.3のインストール(8.2からのアップグレード)

PostgreSQL8.3よりXML型が使えるようになる等、XMLサポートが少し追加された。この機能を利用したいので8.3にアップグレードする。

XMLサポートを有効にしてインストールしたいのでlibxml2のアップグレードを先に行う。

libxmlのインストール

# wget ftp://gd.tuwien.ac.at:21/pub/libxml/libxml2-2.6.31.tar.gz
# tar xvzf libxml2-2.6.31.tar.gz
# cd libxml2-2.6.31
# ./configure --prefix=/usr/local
# make
# make install

ダンプ

8.2で稼働しているデータはそのままでは、8.3では使用できないため、既に登録されているデータが必要な場合は、ここでダンプしておく。

PostgreSQL8.3のインストール

# /etc/init.d/postgresql stop
# wget http://wwwmaster.postgresql.org/redir?http%3A%2F%2Fftp3.jp.postgresql.org%2Fpub%2Fdb%2Fpostgresql%2F%2Fsource%2Fv8.3.1%2Fpostgresql-8.3.1.tar.gz
# tar xvzf postgresql-8.3.1.tar.gz
# cd postgresql-8.3.1
# ./configure --with-libxml
# gmake
# gmake install

8.2が稼働していた場合は、/usr/local/pgsql/dataが既にあり、8.3を起動したときにこれを利用しようとするため、起動できない。そこで、このディレクトリを削除する。(ここでは念のため、data.oldにmoveしている)

# mv /usr/local/pgsql/data /usr/local/pgsql/data.old

エンコードの指定

ここで、いったん/etc/sysconfig/i18nのlangの設定を使用したいDBの
エンコード設定に変更しておく
例.

lang="ja_JP.utf8"

=> UTF8になる

lang="ja_JP"

=> EUC-JPになる

これまでと違い同一data内で異なるエンコードの使用ができないので注意

# /etc/init.d/postgresql start

これでdataディレクトリも作成される。
PostgreSQL8.2等がインストールされていない状態の場合は、この自動起動ファイルの作成も必要。
PostgreSQL8.2のソースインストールを参照。
※ この自動起動ファイルも8.2の個所を8.3にしておく。

当然、dataディレクトリ内の設定が変わっているので
/usr/local/pgsql/data/postgresql.conf
/usr/local/pgsql/data/pg_hba.conf
等の設定をそれぞれ修正。

postgresql.confについては試していないが、pg_hba.confについては前のものをコピーでもOK

# cp -p /usr/local/pgsql/data.old/pg_hba.conf /usr/local/pgsql/data/

PostgreSQLの再起動

# /etc/init.d/postgresql restart

リストア

必要に応じてリストアを行う。

タグ
コメントはありません。 »

PostgreSQL8.2のソースインストール

既存の(rpm版)PostgreSQLのアンインストール

rpm版のPostgreSQLが入っている場合これをアンインストールしてからインストールします。

/etc/init.d/postgresql をとっておく

cp /etc/init.d/postgresql /tmp

rpm版PostgreSQLのアンインストール

rpm -e postgresql-devel
rpm -e postgresql-pl
rpm -e postgresql-test
rpm -e postgresql-server
rpm -e freeradius-postgresql
rpm -e postgresql-contrib
rpm -e postgresql-docs
rpm -e postgresql

PostgreSQL8.2のインストール

ソースのダウンロード

cd /root/install/arc
wget ftp://ftp.jp.postgresql.org/source/v8.2.7/postgresql-8.2.7.tar.gz

解凍

tar xvzf postgresql-8.2.7.tar.gz

インストール

cd postgresql-8.2.7
./configure
gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &

※postgresのshellがbashでないと、「曖昧なリダイレクト出力です」と表示される
⇒/etc/passwd でpostgres のシェルをbashに変更(vipw)

正常にインストールされているかのテスト

/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
/usr/local/pgsql/bin/dropdb test

自動起動ファイルの設定

/etc/init.d/postgresql の編集
先ほどコピーしておいた /root/postgresql を下記の通り編集し
/etc/init.d/postgresql として保存します。

PGVERSION=8.2.1 (7.4.*⇒8.2.7に)

export PGDATA=/var/lib/pgsql

をコメントアウトし

export PGDATA=/usr/local/pgsql

export PGDATA=/var/lib/pgsql/data

をコメントアウトし

export PGDATA=/usr/local/pgsql/data

自動起動の設定

chkconfig --level 345 postgresql on

ライブラリの適用

/etc/ld.so.conf に /usr/local/pgsql/lib を追加し

ldconfig -v
タグ
コメントはありません。 »

PostgreSQLでWARNING: skipping “pg_*” — only table or database owner can vacuum it

PostgreSQLでvacuumをする際に下記のようなワーニングがでていた。

WARNING:  skipping "pg_authid" --- only table or database owner can vacuum it
WARNING:  skipping "pg_tablespace" --- only table or database owner can vacuum it
WARNING:  skipping "pg_pltemplate" --- only table or database owner can vacuum it
WARNING:  skipping "pg_shdepend" --- only table or database owner can vacuum it
WARNING:  skipping "pg_shdescription" --- only table or database owner can vacuum it
WARNING:  skipping "pg_database" --- only table or database owner can vacuum it
WARNING:  skipping "pg_auth_members" --- only table or database owner can vacuum it

調べてみたらバージョン8.1からグローバルテーブルの情報を各DBから参照できるようになったようで、それが原因のようだ。
リリース8.1

PostgreSQLでは、グローバルテーブル(ユーザ、データベース、テーブル空間)の情報を複数のデータベースから参照することができます。

つまり、このバキュームを行っているユーザーはこのDBの所有者なのだが、このDBの中にはグローバルテーブルも含まれてしまっていて、このグローバルテーブルの所有者はスーパーユーザーなので、バキュームはできませんよ、ということ。つまり、このワーニングがでていても問題なしということで。

タグ
コメントはありません。 »