목록 : | pgsql-interfaces |
---|
출발 : | "Dietmar May"<dcmay (at) dmis (dot) com |
---|---|
to : | <pgsql-interfaces (at) postgresql (dot) org |
제목 : | LIBPQ를 메이저 토토 사이트한 레이스 조건 |
날짜 : | 2003-05-18 03:02:35 |
Message-ID : | 009C01C31CE9 $ eeaf00f0 $ fb02a8c0@muskrat |
보기 : | 원시 메시지|전체 스레드|mbox 다운로드|이메일 재판용 |
목록 : | pgsql-interfaces |
안녕하세요,
PGSQL V7.3.2
나는 노력하고있다 :
1) 데이터베이스가 존재하는지 확인하십시오;
2) 그 경우 삭제; 그리고
3) 같은 이름의 새 데이터베이스를 만듭니다.
코드는 pqsetdblogin을 수행합니다 (... dbname = 'somedb'...); (나는 선호한다
pqconnectdb ()를 메이저 토토 사이트하려면 pqsetdblogin이 더 이상 메이저 토토 사이트되지 않는 것으로 보이므로; 하지만 거기
pgconn에서 addr을 얻는 libpq 액세서 함수가 없습니다.)
로그인 상태가 확인되면 데이터베이스가 존재한다는 것을 알고 있습니다. 그래서,
먼저 pgconn은 pqfinish ()에 대한 호출을 통해 닫아야합니다. 다음으로, 나는를 메이저 토토 사이트한다.
다른 연결 (하나는 "template1"데이터베이스에 대해 열림)에
"Drop Database Somedb"실행.
이것은 단일에서 GDB (DDD 프론트 엔드)를 실행중인 경우에만 성공합니다.
단계 모드. 전화 사이에 지연없이 실행하는 경우 (예 : 아니오
인간 상호 작용), 그런 다음 나는 일관되고 반복적으로 오류를받습니다
"DROP DATABASE 실패 : 오류 : DROP DATABASE : DATABASE \"SOMEDB \ "IS BING
다른 메이저 토토 사이트자가 액세스 \ n ".
"다른 메이저 토토 사이트자"는 PGFinish를 메이저 토토 사이트하여 방금 출시 된 PGConn입니다!
코드는 비동기 통화를 메이저 토토 사이트하지 않으므로
pqfinish ()가 호출되었습니다. 내 응용 프로그램이 데이터베이스에있는 잠금 장치
릴리스됩니다. 자원이 언제인지 알 수있는 응용 프로그램은 어떻게
더 이상 메이저 토토 사이트하지 않아도 다시 메이저 토토 사이트할 수 없습니까? 꽤 보인다
이것이 확실하게 결정할 수없는 경우 문제가 있습니다.
-----------------------------
관련 문제로서 문서에서 정확히 명확하지 않습니다
일부 기본 사례에 대해 LIBPQ 함수를 메이저 토토 사이트하는 방법.
PGSQL 서버에 연결할 합리적인 기대
데이터베이스를 열지 않고 기본을 수행 할 수 없습니다
열린 데이터베이스를 메이저 토토 사이트하는 데 의존하지 않는 작업 (메이저 토토 사이트자 생성, Alter
메이저 토토 사이트자, 삭제, 메이저 토토 사이트자, 데이터베이스 생성, 데이터베이스 드롭 등). 불행히도 If
<dbname =는 제공되지 않으며, pqconnectdb는 제공된 <User =을 메이저 토토 사이트하는 것으로 보입니다.
데이터베이스를 열려고 시도합니다 (적어도 오류입니다
보고서). 일반적으로 메이저 토토 사이트자 이름은의 데이터베이스 이름이 아닙니다.
시스템, 물론 시도가 실패 할 것입니다.
일부 테이블을 만들기 위해 새로 생성 된 클러스터에 액세스하는 유일한 방법
dbname = 'template1'으로 pqconnectdb를 수행하려면. 이것이 보장된다
항상 존재하려면? 그리고 실제로 응용 프로그램을 강요하는 것은 디자인 의도입니까
데이터베이스를 만들기 위해 Template1에 연결하려면? 둘 다 버그처럼 보인다
나에게; 또는 최소한 바람직하지 않은 (그리고 분명히 문서화되지 않은)
"기능".
감사,
Dietmar May
출발 : | Tom Lane <tgl (at) sss (dot) pgh (dot) pa (dot) us |
---|---|
to : | "Dietmar May"<dcmay (at) dmis (dot) com |
CC : | pgsql-interfaces (at) postgresql (dot) org |
제목 : | Re : LIBPQ를 메이저 토토 사이트한 레이스 조건 |
날짜 : | 2003-05-26 06:06:58 |
메시지 -ID : | 25801.1053929218@sss.pgh.pa.us |
보기 : | RAW 메시지|전체 스레드|mbox 다운로드|이메일 재판용 |
목록 : | pgsql-interfaces |
"Dietmar May"<dcmay (at) dmis (dot) com writes :
... 전화간에 지연없이 실행하는 경우 (예 : 아니오
인간 상호 작용), 그런 다음 나는 일관되고 반복적으로 오류를받습니다
"DROP DATABASE 실패 : 오류 : DROP DATABASE : DATABASE \"SOMEDB \ "IS가
다른 메이저 토토 사이트자가 액세스 \ n ".
"다른 메이저 토토 사이트자"는 pgfinish를 메이저 토토 사이트하여 방금 출시 된 PGConn입니다!
예, 우리는이 행동이 이전에보고 된 것을 보았습니다. 내가 찾지 못했지만
쉽게 재현 할 수 있습니다. A를 믿기가 매우 어렵습니다.
백엔드 종료는 백엔드 시작보다 오래 걸립니다. 그래서 내 테이크 앤
어떤 이유로 든 커널이 즉시 선택하지 않는 것입니다
첫 번째 백엔드에 대한 첫 번째 연결의 폐쇄를보고합니다. 보통
백엔드가 종료 속도가 느리면 그다지 중요하지 않습니다 ...하지만 그렇다면
데이터베이스를 삭제하고 싶어요.
내 권장 사항은 희생자 데이터베이스에 전혀 연결하지 않는 것입니다.
Template1에 연결 한 다음 드롭 데이터베이스를 발행하십시오. 당신은별로하지 않습니다
실패한 경우 관리하십시오. 그런 다음 데이터베이스 생성을 발행합니다.
약간 깨끗한 사운드 접근 방식은 pg_database를 보는 것입니다 (
Template 1에 대한 연결을 삭제 해야하는지 확인하려면
하지만 다른 사람들과의 인종 조건에 대해 생각할 때
동일한 절차, 이것이 실제로 더 깨끗한 지 확실하지 않습니다.
PGSQL Server에 연결할 합리적인 기대라고 생각합니다
데이터베이스를 열지 않고 기본을 수행 할 수 없습니다
열린 데이터베이스를 메이저 토토 사이트하는 데 의존하지 않는 작업 (메이저 토토 사이트자 생성, Alter
메이저 토토 사이트자, 메이저 토토 사이트자 삭제, 데이터베이스 생성, 데이터베이스 드롭 등)
"데이터베이스를 열지 않는 연결"과 같은 것은 없습니다.
그리고 나는있을 수 있다고 생각하지 않습니다. 컨벤션은에 연결하는 것입니다.
template1. 우리는 아마도 더 강해질 수 있습니다
템플릿에 할 수있는 일에 대한 제한 사항, 긍정적으로 보장하기 위해
그 템플릿 1은 항상 연결할 수 있지만 --- 그렇지 않습니다
위에서 논의한 문제를 실제로 해결하십시오.
GODS, TOM LANE
출발 : | "Dietmar May"<dcmay (at) dmis (dot) com |
---|---|
to : | "Tom Lane"<tgl (at) sss (dot) pgh (dot) pa (dot) us |
CC : | <pgsql-interfaces (at) postgresql (dot) org |
제목 : | Re : LIBPQ를 메이저 토토 사이트한 레이스 조건 |
날짜 : | 2003-05-26 15:47:29 |
메시지 -ID : | 008401C3239E $ 1CD6CCF0 $ FB02A8C0@muskrat |
보기 : | 원시 메시지|전체 스레드|mbox 다운로드|이메일 재판용 |
목록 : | pgsql-interfaces |
Hi Tom,
응답에 감사드립니다. 내 게시물 (비 멤버)이 꽤 지연되었습니다
시간; 그리고 실제로 누군가로부터 응답을 얻어서 감사합니다.
"Dietmar May"<dcmay (at) dmis (dot) com writes :
... 전화간에 지연없이 실행하는 경우 (예 : 아니오
인간 상호 작용), 그런 다음 나는 일관되고 반복적으로 오류를받습니다
"DROP DATABASE 실패 : 오류 : DROP DATABASE : DATABASE
\ "Somedb \"가
다른 메이저 토토 사이트자가 액세스 \ n ".
"다른 메이저 토토 사이트자"는 pgfinish를 메이저 토토 사이트하여 방금 출시 된 PGConn입니다!
예, 우리는이 행동이 이전에보고 된 것을 보았습니다. 내가 찾지 못했지만
쉽게 재현 할 수 있습니다. A를 믿기가 매우 어렵습니다.
백엔드 종료는 백엔드 시작보다 오래 걸립니다. 그래서 내 테이크 앤
어떤 이유로, 커널이 즉시 선택하지 않는 것입니다
첫 번째 백엔드에 대한 첫 번째 연결의 폐쇄 보고서. 보통
백엔드가 종료 속도가 느리면 그다지 중요하지 않습니다 ...하지만 그렇다면
데이터베이스를 삭제하고 싶어요.
FYI, 드롭을 발행하기 전에 1ms 수면을 추가하여 문제를 "해결"했습니다
데이터베이스 명령. 왝!
분명히 인종 조건입니다.
PQEXEC가 a를 발행하는 경우 (귀하의 의견에서) 추측하는 데 옳을까요?
결과 세트를 반환하지 않는 명령을 실행하는 명령
비동기 적으로? 다시 말해, 오류가 없음을 확인한 후
조건 (존재하지 않는 테이블을 떨어 뜨리는 것과 같이).
백엔드 스레드 (또는 수영장에서 실에 연결) 실제로
작동을 수행합니다.
14977_15055
PQEXEC ( "Drop Database")가있을 때까지 생성 데이터베이스를 발행 할 수 없습니다
반환.
이것이 사실이라면, 나는 문제가 다시 나타날 것으로 예상합니다.
많은 데이터가있는 큰 테이블을 삭제하고있었습니다. 아마 아마도
"수면"시간보다 오래 걸립니다.
내 권장 사항은 피해자 데이터베이스에 전혀 연결하지 않을 것입니다.
template1에 연결 한 다음 드롭 데이터베이스를 발행하십시오. 당신은별로하지 않습니다
실패한 경우 관리하십시오. 그런 다음 데이터베이스 생성을 발행합니다.
불행히도 PGSQL을위한 일반적인 C ++ 래퍼를 작업하기 때문에
실패한 경우 관리하십시오. 드롭 데이터베이스를 구별 할 방법이 없습니다
테이블이 존재하지 않기 때문에 실패하는 대 유효한
테이블을 메이저 토토 사이트하는 다른 프로세스와 같은 오류 조건 (아마도
PQERRORMESSAGE의 텍스트를 파싱하는 매우 바람직하지 않은 접근)..
PGSQL 서버에 연결할 합리적인 기대
데이터베이스를 열지 않고 기본을 수행 할 수 없음
열린 데이터베이스를 메이저 토토 사이트하는 데 의존하지 않는 작업 (Create
메이저 토토 사이트자, ALTER
메이저 토토 사이트자, 메이저 토토 사이트자 삭제, 데이터베이스 생성, 데이터베이스 드롭 등)
"데이터베이스를 열지 않는 연결"과 같은 것은 없습니다.
그리고 나는 그럴 수 있다고 생각하지 않습니다. 컨벤션은에 연결하는 것입니다.
template1. 우리는 아마도 더 강해질 수 있습니다
템플릿에 할 수있는 일에 대한 제한 사항, 긍정적으로 보장
템플릿 1은 항상 연결할 수 있지만 --- 그렇지 않습니다.
위에서 논의한 문제를 실제로 해결하십시오.
관리자 안내서 4.1.1 상태 "예를 들어, 템플릿 1과를 삭제할 수 있습니다.
악영향없이 Template0에서 재현합니다 ". [4.1, 다른 쪽
hand, "이 데이터베이스는 Template1이라고하며 삭제할 수 없습니다".]
나는 첫 번째 진술을 "당신은를 의미하는 것으로 잘못 읽었을 것 같아요
Template1 데이터베이스이며이라는 데이터베이스가 포함되지 않은 클러스터가 있습니다.
template1 "; 그러나 이것은 pgsql 이후로 유효한 해석이 아닙니다
많은 내부 작업에 Template1을 메이저 토토 사이트하는 것 같습니다.
나는 PGSQL의 내부를 이해하지 못한다 - 내가 당신을 이해하는지 확실하지 않다
"열기가없는 연결이있을 수 있다고 생각하지 않습니다
모든 데이터베이스 ". 아마도 PGSQL이 정보를 내부적으로 관리하기 때문일 것입니다
일부 내부 데이터베이스 테이블 내의 메이저 토토 사이트자 및 데이터베이스 정보.
그럼에도 불구하고 응용 프로그램 관점에서 (즉,
PGSQL의 내부 작동), 메이저 토토 사이트자와 데이터베이스 생성은 아무것도 없습니다
특정 데이터베이스를 메이저 토토 사이트하십시오. 메이저 토토 사이트자는가 아니라 연결 수준에 있습니다.
데이터베이스 레벨. 내가 틀렸다면 저를 바로 잡아주세요. 그러나 나는 그것이 생각하지 않습니다
시스템에서 하나의 데이터베이스에만 적용되는 메이저 토토 사이트자를 생성 할 수 있습니다.
그래서 시스템을 메이저 토토 사이트하는 프로그래머로서, 나는 다루는 것이 바람직하지 않다고 생각합니다
Template1 이런 종류의 작업에 대해 PGSQL이하는 일이더라도
내부적.
응답에 다시 한 번 감사드립니다.
Dietmar
출처 : | Tom Lane <tgl (at) sss (dot) pgh (dot) pa (dot) us |
---|---|
to : | "Dietmar May"<dcmay (at) dmis (dot) com |
CC : | pgsql-interfaces (at) postgresql (dot) org |
제목 : | Re : LIBPQ를 메이저 토토 사이트한 레이스 조건 |
날짜 : | 2003-05-26 16:30:16 |
메시지 -ID : | 2072.1053966616@sss.pgh.pa.us |
보기 : | RAW 메시지|전체 스레드|mbox 다운로드|이메일 재판용 |
목록 : | pgsql-interfaces |
"Dietmar May"<dcmay (at) dmis (dot) com writes :
PQEXEC가 a를 발행하는 경우 (귀하의 의견에서) 추측하는 데 옳을까요?
결과 세트를 반환하지 않는 명령, 실행하는 명령
비동기 적으로?
PQEXEC는 동기식입니다. 그러나 연결 폐쇄는 아닙니다.
백엔드의 응답 (그리고 거의 할 수 없음).
이것이 내가 볼 수있는 유일한 방법입니다. 내 코드이기 때문에
PQEXEC ( "Drop Database")가 이후까지 생성 데이터베이스를 발행 할 수 없습니다.
반환.
요점이 없습니다. 생성이 아니라 실패하는 것은 낙하입니다.
그리고 오래된 백엔드가 여전히 연결되어 있기 때문에 실패합니다
피해자 데이터베이스.
첫 번째 진술을 "당신은"당신이 삭제할 수 있습니다를 잘못 읽었을 것 같습니다.
template1 데이터베이스이며이라는 데이터베이스가 포함되지 않은 클러스터가 있습니다.
template1 "; 그러나 이것은 pgsql 이후로 유효한 해석이 아닙니다.
많은 내부 작업에 Template1을 메이저 토토 사이트하는 것 같습니다.
"내부"작업에는 메이저 토토 사이트되지 않습니다. 전통적으로
고객이 연결할 표준 장소를 갖도록 선물.
GODS, TOM LANE
출발 : | "Dietmar May"<dcmay (at) dmis (dot) com |
---|---|
to : | "Tom Lane"<tgl (at) sss (dot) pgh (dot) pa (dot) us |
CC : | <pgsql-interfaces (at) postgresql (dot) org |
제목 : | Re : LIBPQ를 메이저 토토 사이트한 레이스 조건 |
날짜 : | 2003-05-26 16:49:38 |
메시지 -ID : | 00A001C323A6 $ CBB02D90 $ FB02A8C0@muskrat |
보기 : | 원시 메시지|전체 스레드|mbox 다운로드|이메일 재판용 |
목록 : | pgsql-interfaces |
감사합니다 Tom,
요점이 없습니다. 생성이 아니라 실패하는 것은 낙하입니다.
그리고 오래된 백엔드가 여전히 연결되어 있기 때문에 실패합니다
피해자 데이터베이스.
실제로, 나는 그것이 실패한 드롭이라는 것을 이해합니다. 내가하지 않은 것
이해는 연결 폐쇄가 비동기식이지만 다른 모든 것은
동기식입니다.
그래서, 연결 릴리스를 닫는 서버 측 코드를 할 수없는 이유
소켓이 닫히기 전에 해당 연결과 관련된 리소스? 그것
그렇게하면이 문제 가이 문제를 상당히 깨끗하게 고칠 수있을 것 같습니다.
[template1]는 "내부"작업에 메이저 토토 사이트되지 않습니다. 그것은
기존에 참석하여 고객이 표준 장소를 갖도록
연결.
아마도 매뉴얼을 오해하고있을 것입니다 - "4.1 : 새 데이터베이스가있을 때
생성 된 템플릿 데이터베이스 [Template1]는 본질적으로 복제됩니다. 이것은 의미
Template1에서 변경 한 모든 변경 사항은 다음과 같이 전파됩니다
생성 데이터베이스. "
빠른 응답에 다시 한 번 감사드립니다.
Dietmar
출발 : | Tom Lane <tgl (at) sss (dot) pgh (dot) pa (dot) us |
---|---|
to : | "Dietmar May"<dcmay (at) dmis (dot) com |
CC : | pgsql-interfaces (at) postgresql (dot) org |
24632_24642 | Re : LIBPQ를 메이저 토토 사이트한 레이스 조건 |
날짜 : | 2003-05-26 17:05:19 |
Message-ID : | 2388.1053968719@sss.pgh.pa.us |
보기 : | 원시 메시지|전체 스레드|mbox 다운로드|이메일 재판용 |
목록 : | pgsql-interfaces |
"Dietmar May"<dcmay (at) dmis (dot) com writes :
따라서, 연결 릴리스를 닫는 서버 측 코드를 메이저 토토 사이트할 수없는 이유
소켓이 닫히기 전에 해당 연결과 관련된 리소스? 그것
그렇게하면이 문제 가이 문제를 상당히 깨끗하게 고칠 수있는 것 같습니다.
그게 어떻게 도움이 될까요? 클라이언트는 그것을 기다리지 않습니다. 왜냐하면
이미 소켓을 닫았습니다.
아마도 매뉴얼을 오해하고있을 것입니다 - "4.1 : 새 데이터베이스가있을 때
생성 된 템플릿 데이터베이스 [Template1]는 본질적으로 복제됩니다.
최소한 최근 버전에서는 Template1이 기본 템플릿입니다.
유일한 가능성이 아닙니다.
이론적으로 실제로 템플릿없이 실행할 수는 있지만
누군가가 유용하다고 생각하는 충분한 클라이언트 측 코드를 깨뜨립니다
실제로 그렇게하려면
GODS, TOM LANE
출발 : | "Dietmar May"<dcmay (at) dmis (dot) com |
---|---|
to : | "Tom Lane"<tgl (at) sss (dot) pgh (dot) pa (dot) us |
CC : | <pgsql-interfaces (at) postgresql (dot) org |
제목 : | Re : LIBPQ를 메이저 토토 사이트한 레이스 조건 |
날짜 : | 2003-05-26 18:25:38 |
Message-ID : | 00AB01C323B4 $ 3516D4C0 $ FB02A8C0@muskrat |
보기 : | 원시 메시지|전체 스레드|mbox 다운로드|이메일 재판용 |
목록 : | pgsql-interfaces |
Hi Tom,
따라서 연결을 닫는 서버 측 코드가없는 이유
이전에 해당 연결과 관련된 리소스 릴리스
소켓이 닫혔습니까? 그렇게하는 것은 이것을 고칠 수있는 것 같습니다
문제가 매우 깨끗합니다.
그게 어떻게 도움이 될까요? 클라이언트는 그것을 기다리고 있지 않습니다.
이미 소켓을 닫았 기 때문에
아하! 귀하의 의견은 실제로 문제를 좁히는 데 도움이됩니다.
우리는 여기에 솔루션을 받고 있습니다.
아마도 연결을 종료하는 대신 pqfinish ()가 할 수 있습니다
서버에 연결을 닫으라고 요청하고 연결 될 때까지 차단
가 닫혔습니다. 서버는 먼저와 관련된 모든 리소스를 정리합니다.
연결을 닫은 다음 연결을 닫습니다. 클라이언트 코드는입니다.
소켓이 종료 될 때 더 이상 메이저 토토 사이트중인 리소스가 없는지 확인하십시오.
이것은 드롭의 경우뿐만 아니라 인종 조건을 처리 할 것입니다
데이터베이스이지만 다른 경우에도 가능합니다. 결국, 실제로는 없습니다
보장 된 프로세스 실행 순서 또는 프로세스 실행 스케줄링,
다양한 프로세스가 실행되는 우선 순위.
이론적으로, 다른 유사한 인종 조건 실패가 발생할 수 있습니다
현재 연결 폐쇄 설계로 인해. 이 작업을 변경하여
약간, 이러한 레이스 조건의 가능성을 제거 할 수 있습니다.
현재 동작은 아마도 추가 부울을 사용하여 여전히 지원 될 수 있습니다
pqfinish ()에 대한 매개 변수, 누군가가를 보장 할 필요가없는 경우
Server-Side Resources는 pqfinish ()에서 돌아 오기 전에 릴리스됩니다.
GODS,
Dietmar