PostgreSQL-데이터베이스 이름 바꾸기


127

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

내가 어떻게 해?

( WindowsXP의 버전 8.3 )

최신 정보

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

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


1
왜 그렇게 할 수 없는지 자세히 설명 할 수 있습니다. 방금 (다른 플랫폼에서)했고 작동했습니다
Vinko Vrsalovic

1
정확한 오류 메시지는 무엇이며 postgres 문서에서이 오류를 찾았습니까? 그 행동에 대한 완벽한 이유가있을 수 있습니다. 일반적으로 이름 변경이 작동합니다.
존재하지 않음

업데이트 질문
Patrick Desjardins

데이터베이스를 다시 시작하지 않는 이유는 무엇입니까?
존재하지 않음

정확한 오류 메시지는 무엇이며 postgres 문서에서이 오류를 찾았습니까? 그 행동에 대한 완벽한 이유가있을 수 있습니다. 일반적으로 이름 변경이 작동합니다. 보류 중이거나 끊어진 연결에 문제가있는 경우 데이터베이스를 다시 시작하여 제거하십시오.
존재하지 않음

답변:


190

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

ALTER DATABASE people RENAME TO customers;

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


18
이름에 대문자가있는 경우 따옴표가 필요합니다.
Patrick Desjardins

7
이 경우가 아니라 이름이있을 때도 필요 인용이 .@.
오마르

6
이름이 포함 된 경우도 필요 인용-
GreenTurtle

위의 제안은 가능한 경우 테이블 이름을 소문자밑줄로 제한하는 것이 더 낫다고 생각하게 합니다!
Aswin Sanakan

이름에 빈 공간이 포함 된 경우에도 인용이 필요합니다.
Loaderon

86

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

-- 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.


3
그것은 나를 위해 일했습니다, 고맙습니다! 그러나 pg_stat_activity의 열 이름은 procpid가 아니라 pid입니다. ( PostgreSQL 9.3.5 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit)
bodman 2015

7

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

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


3

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

모두들.


3

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


0

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.