> 백엔드 개발 > Golang > 현재 연결된 PostgreSQL 데이터베이스를 삭제하는 방법은 무엇입니까?

현재 연결된 PostgreSQL 데이터베이스를 삭제하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-19 12:15:03
원래의
733명이 탐색했습니다.

How to Drop a Currently Connected PostgreSQL Database?

현재 연결된 Postgres 데이터베이스 삭제 중 오류

현재 Postgres에 연결된 데이터베이스를 삭제하려고 하면 다음 오류가 발생할 수 있습니다.

pq: cannot drop the currently open database
로그인 후 복사

이 오류는 데이터베이스 삭제 시 제거 중인 데이터베이스에 대한 연결을 닫아야 하기 때문에 발생합니다. 연결이 닫히면 dbConn.Exec를 사용하여 DROP DATABASE를 실행할 수 없다는 혼란이 있습니다.

해결책

현재 연결된 데이터베이스를 삭제하는 데 권장되는 접근 방식은 다른 데이터베이스에 연결하여 거기에서 DROP DATABASE 명령을 실행하십시오. 이는 삭제되는 데이터베이스에 대한 연결이 삭제 시 무효화되기 때문입니다.

예:

import "github.com/lib/pq"

...

func dropDatabase(dbName string) error {
    // Connect to a different database (e.g., template1)
    otherConn, err := pq.Open("other_conn_string")
    if err != nil {
        return err
    }
    defer otherConn.Close()
    
    // Drop the desired database from the other connection
    _, err = otherConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName))
    return err
}
로그인 후 복사

대체 접근 방식(강제 연결 끊기)

다른 클라이언트가 삭제되는 데이터베이스에 연결되어 있고 긴급 제거가 필요한 경우 다음 명령을 사용하여 대상 데이터베이스에서 모든 클라이언트의 연결을 강제로 끊을 수 있습니다(요구 사항은 PostgreSQL 버전에 따라 다름):

-- PostgreSQL < 9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';

-- PostgreSQL >= 9.2
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
로그인 후 복사

참고: 슈퍼유저 권한으로 이 명령을 실행하세요. 클라이언트 연결이 강제로 끊어지면 다른 데이터베이스에 연결하여 DROP DATABASE 명령을 실행할 수 있습니다.

위 내용은 현재 연결된 PostgreSQL 데이터베이스를 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿