[sql] PostgreSQL-데이터베이스 이름 바꾸기

데이터베이스 이름을 변경해야하는데 이름을 바꿀
PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld"수 없다는 메시지가 표시되었습니다.

내가 어떻게 해?

( WindowsXP의 버전 8.3 )

최신 정보

  • 첫 번째 오류 메시지 : 연결할 수 없습니다. 그래서 다른 데이터베이스를 선택하고 쿼리를 수행했습니다.

  • 사용자가 연결되었다는 두 번째 오류 메시지가 나타납니다. 나는에서 볼 PGAdmin이 많이 가지고 화면 PID그러나 그들은 비활성 … 나는 그들을 죽일 표시되지 않습니다.



답변

데이터베이스 이름을 인용하지 마십시오.

ALTER DATABASE people RENAME TO customers;

또한 당시 데이터베이스에 연결된 다른 클라이언트가 없는지 확인하십시오. 마지막으로 반환되는 오류 메시지를 게시하여 더 많은 정보를 얻을 수 있습니다.


답변

향후 참조를 위해 다음을 수행 할 수 있습니다.

-- disconnect from the database to be renamed
\c postgres

-- force disconnect all other clients from the database to be renamed
SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'name of database';

-- rename the database (it should now have zero clients)
ALTER DATABASE "name of database" RENAME TO "new name of database";

테이블 pg_stat_activitypidprocpid9.2 이전 버전에서 와 같이 이름이 지정되었습니다 . PostgreSQL의 버전이 9.2보다 낮은 경우에 따라서, 사용하는 procpid대신 pid.


답변

나는 방금 이것을 만났고 아래는 효과가 있었다.

1) pgAdmin세션 중 하나입니다. psql대신 사용하십시오 .
2) pgBouncerWindows 에서 및 / 또는 스케줄러 서비스도 세션을 생성하므로 중지 합니다.


답변

Unexist는 데이터베이스를 다시 시작하라는 의견을 말했으며 작동합니다! 데이터베이스를 다시 시작하면 기존 연결이 모두 종료되고 다른 데이터베이스에 연결하여 초기 쿼리로 이름을 바꿀 수 있습니다.

모두들.


답변

핵을 배포하는 대신 (서버를 다시 시작하는) 연결 위치를 찾고 클라이언트 프로세스를 종료하거나 pg_cancel_backend()기능 을 사용하여 방해가되는 연결을 닫아야 합니다.


답변

DBeaver를 사용하여이 문제를 겪고 다음과 같은 오류 메시지를받는 사람 :

ERROR: database "my_stubborn_db" is being accessed by other users
  Detail: There is 1 other session using the database.

현재 연결을 끊고 이름을 바꾸려는 데이터베이스를 대상으로하지 않는 연결을 사용하여 동일한 서버에 다시 연결합니다.

활성 데이터베이스를 변경하는 것만으로는 충분하지 않습니다.


답변