- PR -

pgaccess で Attribute 'oid' not found

1
投稿者投稿内容
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2002-10-22 13:34
 お世話になっております。Redhat7.2上でpostgreSQL7.2 を動かしております。postgreSQL7.1 を使用していた時はこのようなエラーは起こりませんでしたが、新規にサーバーを立ち上げる際にどうせなら7.2にしてしまえ、ということで7.2にしました。

 クライアントはwindowsを使用しておりますので、windows版のpgaccessを使ってデータベースにアクセスしております。

 そしてテーブルのデザインを参照しようとすると、「Attribute 'oid' not found」いうエラーが表示されました。詳細を表示しますと


-------------------------------------------------------------------------
ERROR: Attribute 'oid' not found

while executing
"pg_select pgsql256 {select oid,indexrelid from pg_index where (pg_class.relname='shainwork') and (pg_class.oid=pg_index.indrelid)} rec {
lappend PgA..."
("uplevel" body line 1)
invoked from within
"uplevel pg_select $args"
(procedure "wpg_select" line 3)
invoked from within
"wpg_select $CurrentDB "select oid,indexrelid from pg_index where (pg_class.relname='$PgAcVar(tblinfo,tablename)') and (pg_class.oid=pg_index.indrelid)..."
(procedure "refreshTableInformation" line 48)
invoked from within
"refreshTableInformation"
(procedure "Tables:esign" line 5)
invoked from within
"Tables:esign $objname"
("Tables" arm line 2)
invoked from within
"switch $PgAcVar(activetab) {
Tables {
Tables:esign $objname
}
Schema {
Schema:pen $objname
}
Queries {
Queries:esign $objname
}
V..."
(procedure "Mainlib::cmd_Design" line 7)
invoked from within
"Mainlib::cmd_Design"
invoked from within
".pgaw:Main.btndesign invoke"
("uplevel" body line 1)
invoked from within
"uplevel #0 [list $w invoke]"
(procedure "tkButtonUp" line
invoked from within
"tkButtonUp .pgaw:Main.btndesign"
(command bound to event)
-------------------------------------------------------------------------

となっております。

 googleで検索すると同じような現象が書いてありましたが、いまいち解決できませんでした。どうすればよろしいでしょうか、お詳しい方、是非ご教授いただきたいと思います。
yoka
常連さん
会議室デビュー日: 2002/04/09
投稿数: 29
投稿日時: 2002-10-22 14:49
PostgreSQL のバージョン 7.2 から、oid が存在しないテーブルを作成することが可能になっています。
しかし、付属する pgaccess はテーブルの oid を用いて管理しているようで、oid が無いテーブルを参照しようとするとエラーになるようです。

対応策は...

pg_dump で DDL とデータのバックアップをとって、CREATE TABLE に WITH OID をつけてテーブルを再構築する位しか思い浮かびません。

$ pg_dump -s database_name > database_name.ddl
$ pg_dump -a database_name > database_name.dump

databae_name.ddl 中の CREATE TABLE 文に WITH OIDS を付ける(うまいスクリプトが浮かびません...)

$ craetedb restore_database
$ psql -e restore_database < database_name.ddl
$ psql -e restore_database < database_name.dump

oid が無いテーブル、および pgaccess をあまり利用したことがないので外しているかもしれません。
# ホントは pgaccess のソース(tcl)を直した方が皆さんが幸せになれるんですよね、きっと。
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2002-11-07 10:33
 返答が遅れまして大変失礼いたしました。ご回答ありがとうございます。
ところで。
http://ml.postgresql.jp/pipermail/pgsql-jp/2002-March/000225.html
を見ましたところ、

「既存のpgaccessを削除して7.2のソースより再度取得したら正常に動作しました。
ご指摘の通り理由は不明ですが pgaccess の更新が正常に行われていなかった様
です。


とあるのですが、「7.2用のpgaccessをソースより取得する」とはどうすることなのでしょうか。ご教授願います。
yoka
常連さん
会議室デビュー日: 2002/04/09
投稿数: 29
投稿日時: 2002-11-07 13:11
PostgreSQL 7.2 をソースからコンパイルしたのであれば、pgaccess のソースは以下の場所にあります。

postgresql-7.2.3/src/bin/pgaccess/

pgaccess は tcl/tk スクリプトですので、ソース中の pgaccess/ 以下のファイルを pgaccess を利用する Windows のインストール先に上書きすると言うことではないでしょうか。
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2002-11-07 13:38
 ご返答ありがとうございました。見事に動きました。適切なアドバイス感謝しております。今後ともよろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)