- - PR -
pgaccess で Attribute 'oid' not found
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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: ![]() invoked from within "Tables: ![]() ("Tables" arm line 2) invoked from within "switch $PgAcVar(activetab) { Tables { Tables: ![]() } Schema { Schema: ![]() } Queries { Queries: ![]() } 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で検索すると同じような現象が書いてありましたが、いまいち解決できませんでした。どうすればよろしいでしょうか、お詳しい方、是非ご教授いただきたいと思います。 |
|
投稿日時: 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)を直した方が皆さんが幸せになれるんですよね、きっと。 |
|
投稿日時: 2002-11-07 10:33
返答が遅れまして大変失礼いたしました。ご回答ありがとうございます。
ところで。 http://ml.postgresql.jp/pipermail/pgsql-jp/2002-March/000225.html を見ましたところ、 「既存のpgaccessを削除して7.2のソースより再度取得したら正常に動作しました。 ご指摘の通り理由は不明ですが pgaccess の更新が正常に行われていなかった様 です。 」 とあるのですが、「7.2用のpgaccessをソースより取得する」とはどうすることなのでしょうか。ご教授願います。 |
|
投稿日時: 2002-11-07 13:11
PostgreSQL 7.2 をソースからコンパイルしたのであれば、pgaccess のソースは以下の場所にあります。
postgresql-7.2.3/src/bin/pgaccess/ pgaccess は tcl/tk スクリプトですので、ソース中の pgaccess/ 以下のファイルを pgaccess を利用する Windows のインストール先に上書きすると言うことではないでしょうか。 |
|
投稿日時: 2002-11-07 13:38
ご返答ありがとうございました。見事に動きました。適切なアドバイス感謝しております。今後ともよろしくお願いします。
|
1