PostgreSQL에서 변수를 설정하기 위해 Hasql을 사용하여 매개 변수화 된 명령문을 작성하려고합니다.Hasql : 'SET'문에서 변수 대체 오류가 발생했습니다.
import qualified Hasql.Encoders as E
import qualified Hasql.Decoders as D
setOrganization :: Query Int64()
setOrganization = statement sql (E.value E.int8) D.unit False
where
sql = "set my_session.organization_id = $1"
위의 결과는 다음과 같습니다
ResultError (ServerError "42601" "syntax error at or near \"$1\"" Nothing Nothing)
는 예를 들어, 작은 따옴표를 추가 organization_id
가 bigint
/int8
때문에 이해하지
ResultError (ServerError "22P02" "invalid input syntax for integer: \"$1\"" Nothing Nothing)
: 나는 변수를 사용하여 쿼리를 실행할 때
sql = "set my_session.organization_id = '$1'"
는이 결과를 제공합니다.
어느 형식 으로든 $1
값을 하드 코딩하면됩니다. 나는 다른 Hasql 유형을 시도했다. E.text
및 E.unknown
이며 작동하지 않습니다.
업데이트 : postgresql-libpq
에서 원시적 execParams
기능을 사용.
execParams c "SET my_session.organization_id = '$1'" [Just (Oid 20, "1",Text)] Text
인용 부호가없는 변수는 FatalError
결과를 제공합니다. 작은 따옴표로 묶인 변수는 CommandOk
으로 표시되지만 나중에 쿼리 할 때는 잘못된 형식 (bigint
아님)입니다.
오류 메시지는 '$ 1'장소 소유자가 대체되지 않음을 나타냅니다. –
오류보고는 변수 대체가 없다고 생각합니다. '$ 1' 자리 표시 자 형식을 사용하면'$ 1 + 4 '에 사용할 수 있으므로 형식이 괜찮습니다. – Mikkel