• 締切済み

PostgreSQL初心者です。助けてください。

PostgreSQLを使用し、PHPプログラムから・・・ プログラム記述をミスしてしまい。 トランザクションを終了できないままテーブルがロックされてしまいました。 bigin を実行し lock table しましたが 何と commit 文が注釈に なっており、テーブルがロックされたままの状態になってしまいました。 drop table もできなくなっています。 とにかくこのロック状態を解消したいのですが・・・ よろしくご教授ください。

みんなの回答

回答No.2

失礼しました。 UNLOCK TABLES は、MySQLでした。

回答No.1

時間が経過しているのですでに解決ずみかもしれません。 UNLOCK TABLES で出来ると思います。ただし、これはすべてのテーブルのロックを解除します。

関連するQ&A

  • postgresqlでのトランザクションについて

    postgresqlで、「WARNING  進行中のトランザクションがありません」のエラーが出てしまいました。 これはそのままの意味だと思うのですが 直す方法がわかりません。 ワーニングなので、、、といいたいところですが、そうもいかず。 apのログで、トランザクション関係の辺りを見ましたところ、 トランザクションを開始し、 TABLEをDROPしようとしましたが、存在しなかった(ようだ)。 (PQexecがエラーでリターン) 存在しないけれど、commit してトランザクションを終わらせている。 のが原因かなと思いました。 なので、PQexec()がエラーの場合はcommitしなければいいのかと はずしましたが結果は同じでした。 トランザクションが無いのだからrollbackもいらないですよね。 そこで質問ですが drop文、1ステップのSQL実行も明示的にトランザクションの処理をしたほうがいいのでしょうか? このワーニングは通常のトランザクションの処理の中で、どういう時にでるのでしょうか? oracleとpostgresqlの明示的・暗黙的な制御に戸惑っています。 (oracleからpostgresqlに移行することになりました) 叱咤でも何でもかまいませんので、アドバイスよろしくお願いいたします。

  • PostgreSQL LOCK TABLE

    はじめまして、小澤と申します。 PostgreSQL はあまり使う機会が無かったので、 実務期間数か月の初心者です。 数年前に作成されたサイトのメンテナンスをしております。 本番環境の DB は、更新することが出来ないので、 ローカルに開発環境を作って、修正作業を行っています。 本番環境と開発環境の、PostgreSQL のバージョンの違いによって 困っています。 PHP で、「LOCK TABLE ~ 」という処理があるのですが、 本番環境は問題なく実行できますが、開発環境で、下記のエラーがでます。 SQL エラー: ERROR: LOCK TABLEはトランザクションブロック内でのみ使用できます LOCK TABLE をトランザクションの BEGIN と COMMIT の中に 入れなさい、ということおt思います。 本番環境は、Linux バージョンは 7.3.4 開発環境の、Windows バージョンは 8.4.4 7.3.4 の頃には、トランザクション処理が無かったのか、 LOCK TABLE との関係が定義されてなかったのかもしれません。 開発環境の PostgreSQL のバージョンを 7.3.4 にしようと思い、 探したのですが、Windows 版はもう無いようです。 下記のことを教えて下さい。 1.開発環境の PostgreSQL の設定で、このエラーを出ないようにする 方法はないでしょうか。 2.Windows 版の PostgreSQL のバージョンを 7.3.4 が、 どこかにないでしょうか。 尚、ソースにトランザクション処理を追加するという方法も考えましたが、 修正箇所が多いので、難しいです。 メーリングリストにも出してます。マルチキャストですみません。 以上、宜しくお願いします。

  • postgresqlのトランザクションについて

    開発環境(centOS、apatch、php、postgresql) postgrsqlで「current transaction is aborted, commands ignored until end of transaction block」 のエラーが出てしまいました。 ・複数テーブルに対してinsertを行っています。 ・複数tableのinsert中のどこかでエラーになった場合、全tableをrollbackしたいです。 ・複数テーブルのうち、ひとつのtableでは5回insertを行っています。   for文でまわしているのですが、ここで2回目のinsertの時に   上記のエラーになってしまいます。 で、トランザクション(begin、rollback、commit)を全てはずしたところ、全てのtableで正常にinsertできました。 上記のエラーを調べてみても rollbackしていない・・・みたいなことしか調べられませんでした。 エラーにはなっていないのでrollbackはしないし、ここでcommitしてしまうと、次のinsertなどでエラーになった時、rollbackできなくなってしまうし。。。 上記のエラーをなくすために どのような対策をすればいいのかアドバイスをお願いいたします!

  • AccessShareLock はどの程度気にする必要がある?

    PostgreSQL8.2とJavaを使ったWebアプリケーションを構築しています。 pgAdminでサーバー状態>ロック で参照してみたところ、AccessShareLockというのが大量に発生していました。 マニュアルを参照してみたところ、 >AccessShareLock を除き,トランザクション内で獲得されたすべての ロックモードは,そのトランザクション実行の間維持されます. とあり、つまりAccessShareLockはトランザクションの間でも維持されないということだと思うのですが、どうも解放されてはいないようです。 これは通常の(つまり、更新しない)select文を発行したときに発生するロックだと思うのですが、いろいろ調べても、どうもこのAccessShareLockというのをどのくらい気にしたらいいのかがわかりません。 このロックが残っていると、どのようなときに困るでしょうか。 また、解放するためには通常のselectのあとでもcommit(またはrollback)をする必要があるということになるでしょうか。その際にはcommitとrollback、どちらがいいということはあるでしょうか。 ご存じのかたがいらっしゃいましたらご教示いただければと思います。よろしくお願いいたします。

  • トランザクションについて

    MySQLバージョン4.1.16を使っています。 トランザクションは2つに分けて行う場合と1つで済ませる場合とでは どちらが良い悪いなど違いはあるのでしょうか? できれば1つで済ませれば良いのでしょうが、 2つに分けなければいけない状態の時に、何か注意する点など出てくるのでしょうか? START TRANSACTION; UPDATE table1 SET a=1 WHERE type=1; COMMIT; START TRANSACTION; UPDATE table2 SET b=1 WHERE type=1; COMMIT; それか START TRANSACTION; UPDATE table1 SET a=1 WHERE type=1; UPDATE table2 SET b=1 WHERE type=1; COMMIT;

    • ベストアンサー
    • MySQL
  • oracleからposgreへの移行時の「LOCK

    Webアプリをoracleからpostgresqlに移行しています。 行き詰ってしまったので、どなたかアドバイスをお願いします! セッション1で  LOCK TABLE abc IN EXCLUSIVE MODE としている状態で、セッション2で select処理をして内容表示する処理があるのですが posgreでは、トランザクションを終了しないと、セッション2は止まったままになってしまいます。 セッション1のトランザクションを終了すると、セッション2で正常に表示できるのですが。。。 oracleでは、selectがLOCK前の状態で結果を返してくれるので セッション2も正常に表示できています。 いろいろ調べて、selectはOKのようなMODEも試したのですが、 解決できませんでした。 該当テーブルはROW単位ではなく、全体でLOCKしないとダメなのです。 ※試した方法は、 psqlで該当テーブルを、IN EXCLUSIVE MODEでLOCKし、Webアプリで select表示する処理を行いました。 よろしくお願いします。

  • PostgreSQLの「not null」制約の追加

    こんにちは。いつもお世話になります。 PostgreSQLのversion7.2.8で、「not null」制約の追加、削除の方法をおたずねします。よろしくお願いします。 ALTER TABLE テーブル名 ALTER COLUMN カラム名 SET NOT NULL; で試したところ、syntaxエラー(構文エラー)で失敗。 ALTER TABLE テーブル名 ALTER COLUMN カラム名 DROP NOT NULL; で試してみても、同じくsyntaxエラーです。 version7.2.8が原因でしょうか? また、version7.2.8でも「not null」制約の追加、削除が できる他の方法はありますでしょうか? テーブルを作り直さずに、 既存のテーブルのカラムへの制約の追加、削除をしようとしています。 よろしくお願いします。

  • PostgreSQLを完全に削除出来ない

    以前試しにPostgreSQLをインストールしたことがあって、一度削除していました。そして今回新しく構築したく再インストールしたのですが、pgAdminIIIを開くと、以前作成状態とまったく同じになってます。 削除方法に問題があるのでしょうか?以下に作業内容を記述します。 1.プログラムの追加と削除でPostgreSQLを削除 2.管理ツールのユーザーよりPostgreSQL service accountの削除 3.Documents and Settingsにpostgres関連のディレクトリが作成されていたので削除 4.PostgreSQLをインストール 5.以前の状態で復活・・・ ■環境 OS:WindowsXPpro DB:PostgreSQL 8.0.3 / pgAdminIII 1.3.0 インストール方法は以下ページと同じ http://allabout.co.jp/internet/database/closeup/CU20050122A/index.htm 以上よろしくお願いします。

  • select for updateのロック

    オラクルのselect for updateでロックをするタイミングがいつですか? こんなPL/SQLのコードがあったとします。 ---↓↓↓ソースコードここから↓↓↓------------------------- select * from テーブル1 where id = 1 for update; ・・・・・(a) ~ update テーブル1 set kingaku=100 where id = 1 ・・・・・(b) ~ commit; ---↑↑↑ソースコードここまで↑↑↑------------------------- id = 1のレコードがロックされるのは(a)、(b)どちらのタイミングですか? また、このロックは ・他トランザクションから読めるけど更新できない ・他トランザクションからは読むことすらできない のどちらでしょうか? よろしくお願いします。

  • トランザクションモード

    早速ご教示ください。 データベース(TEST_db)のM_SYAIN_CDというテーブルがあるとします。 【クエリアナライザ】TEST_db BIGIN TRANSACTION GO DELETE M_SYAIN_CD GO 上記を実行します。 この状態で、M_SYAIN_CDの全行を返すと、『Microsoft odbc sqlserver driver 時間切れになりました』とエラーになり全行返すことができません。 (1)なぜMicrosoft odbc sqlserver driver 時間切れになりました。とな るのか? トランザクションモード中にテーブルは見れないのでしょうか? 【クエリアナライザ】TEST_db BIGIN TRANSACTION GO DELETE M_SYAIN_CD GO COMMIT TRANSACTION GO (2)上記実行後、ROLLBACKはできるのでしょうか? ご教示の程宜しくお願い致します。