"DROP TABLE"
コマンドを使用していくつかのテーブルを削除しようとしていますが、未知の理由でプログラムが単に「座って」いて、データベース内のテーブルを削除しません。法案の製品を参照するために使用されPostgresql DROP TABLEが機能しない
製品、ビルとBill_Products:
は、私は、データベース内の3つのテーブルを持っています。
私は商品を削除/削除できましたが、請求書とBill_Productsで同じことをすることはできません。 同じ"DROP TABLE Bill CASCADE;"
コマンドを発行していますが、コマンドラインだけが停止します。私はまた、CASCADE
オプションのないシンプルなバージョンを使用しました。
これはなぜ起こっているのでしょうか?
更新:
私はそれが法案への製品からいくつかの参照を保持するためにデータベース用可能であり、それはビル・テーブルは削除されませんなぜ多分それはだと考えてきました。
そのため、私は単純なSELECT * from Bill_Products
を発行しました。数十秒後に(奇妙なことに、それは空のテーブルがあるような長い時間続くのが普通だと思っていないので)テーブルとその内容を印刷します。 (だから明らかに商品からビルに残っている参照はありません)。
SELECT *
FROM pg_locks l
JOIN pg_class t ON l.relation = t.oid AND t.relkind = 'r'
WHERE t.relname = 'Bill';
の出力はそれが並行して、あなたのテーブルを使用して他のセッションをしているし、あなたがそれをドロップするAccess Exclusiveロックを取得することができないということかもしれないです何
何CASCADEをしていない程度。おそらく制約は、現在欠けている製品を指していた可能性があります – Randy
これも試してみましたが効果はありません。 –
"コマンドラインだけが停止します"これはどういう意味ですか? 'psql'がクラッシュ、ハング、フリーズしますか?あなたはそれを殺さなければなりませんか? Ctrl-Cは何をするのですか?私はちょうど '屋台'を定義していると思う。またはpsqlを使用していませんか? – alan