현재 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!