2010年04月19日
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とは全く関係なし。たまたま上記サイトを見つけただけ。
タグデータベース mysql mysql utf8 文字コード
コメントはありません。 »
2008年04月04日
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
リストア
必要に応じてリストアを行う。
タグインストール・設定 データベース xml
コメントはありません。 »
2008年03月27日
既存の(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 インストール
コメントはありません。 »
2007年12月16日
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の中にはグローバルテーブルも含まれてしまっていて、このグローバルテーブルの所有者はスーパーユーザーなので、バキュームはできませんよ、ということ。つまり、このワーニングがでていても問題なしということで。
タグデータベース postgresql
コメントはありません。 »