복붙노트

[PYTHON] Postgresql DROP TABLE이 작동하지 않습니다.

PYTHON

Postgresql DROP TABLE이 작동하지 않습니다.

"DROP TABLE"명령으로 테이블을 삭제하려고하지만 알 수없는 이유로 프로그램이 "앉아서"데이터베이스에서 원하는 테이블을 삭제하지 않습니다.

데이터베이스에 3 개의 테이블이 있습니다.

제품, 청구서 및 청구서에서 제품을 참조하는 데 사용되는 Bill_Products.

나는 제품을 삭제 / 삭제할 수 있었지만 청구서 및 Bill_Products에 대해서는 동일한 작업을 수행 할 수 없습니다. 나는 같은 "DROP TABLE Bill CASCADE;"를 발행하고있다. 명령을 실행하면 명령 줄이 멈 춥니 다. 또한 CASCADE 옵션없이 간단한 버전을 사용했습니다.

왜 이런 일이 일어나고 있는지 아십니까?

최신 정보:

필자는 데이터베이스에서 제품에 대한 참조를 지폐로 유지하는 것이 가능하다고 생각했기 때문에 Bill 테이블을 삭제하지 않는 이유가 될 수 있습니다.

그래서, Bill_Products에서 간단한 SELECT *를 발행하고 몇 초 (10-15 초) 후에 (이상하게도 빈 테이블이있을 때 오랜 시간 지속되는 것이 정상적이라고 생각하지 않기 때문에) 이상하게 인쇄됩니다. 테이블과 그것의 내용은 아무 것도 아니다. (그래서 명백하게 제품에서 계산서에 참조 사항이 남아 있지 않다).

해결법

  1. ==============================

    1.의 출력은 무엇입니까?

    의 출력은 무엇입니까?

    SELECT *
      FROM pg_locks l
      JOIN pg_class t ON l.relation = t.oid AND t.relkind = 'r'
     WHERE t.relname = 'Bill';
    

    테이블을 병렬로 사용하는 다른 세션이있을 수 있으며 액세스 독점 잠금을 사용하여 해당 세션을 삭제할 수 없습니다.

  2. ==============================

    2.그냥 해

    그냥 해

    SELECT pid, relname
    FROM pg_locks l
    JOIN pg_class t ON l.relation = t.oid AND t.relkind = 'r'
    WHERE t.relname = 'Bill';
    

    다음으로 모든 pid를 죽입니다.

    kill 1234
    

    여기서 1234는 쿼리 결과의 실제 PID입니다.

    다음과 같이 모두 파이프로 연결할 수 있습니다 (모든 PID를 수동으로 복사하여 붙여 넣을 필요가 없습니다).

    psql -c "SELECT pid FROM pg_locks l 
        JOIN pg_class t ON l.relation = t.oid AND t.relkind = 'r' 
        WHERE t.relname = 'Bill';" | tail -n +3 | head -n -2 | xargs kill
    
  3. ==============================

    3.그래서 같은 문제를 풀려고 몇 시간 동안 벽에 머리를 대고 있었고 여기에 나와있는 해결책이 있습니다.

    그래서 같은 문제를 풀려고 몇 시간 동안 벽에 머리를 대고 있었고 여기에 나와있는 해결책이 있습니다.

    PostgreSQL에 커밋되거나 롤백 된 적이없는 대기중인 준비된 트랜잭션이 있는지 확인하십시오.

    SELECT database, gid FROM pg_prepared_xacts;
    

    결과를 얻으면 각 트랜잭션 gid에 대해 문제가있는 데이터베이스에서 ROLLBACK을 실행해야합니다.

    ROLLBACK PREPARED 'the_gid';
    

    자세한 내용은 여기를 클릭하십시오.

  4. ==============================

    4.같은 문제가있었습니다.

    같은 문제가있었습니다.

    테이블에 자물쇠가 없었습니다.

    재부팅이 도움이되었습니다.

  5. ==============================

    5.오래된 질문이지만 비슷한 문제가 발생했습니다. 데이터베이스를 재부팅 할 수 없으므로이 순서가 작동 할 때까지 몇 가지를 테스트했습니다.

    오래된 질문이지만 비슷한 문제가 발생했습니다. 데이터베이스를 재부팅 할 수 없으므로이 순서가 작동 할 때까지 몇 가지를 테스트했습니다.

  6. from https://stackoverflow.com/questions/10317114/postgresql-drop-table-doesnt-work by cc-by-sa and MIT license