PostgreSQL 데이터베이스에는 PL/pgSQL로 작성된 함수가 포함되어 있습니다. 나는 pgScript (예를 들어 위와 동일 SQL을 실행하면 실행 pgAdmin에 실행 pgScript 버튼을 클릭하는 대신 , 그러나pgAdmin pgScript에서 PL/pgSQL 함수를 호출 할 수없는 이유는 무엇입니까?
BEGIN TRANSACTION;
SELECT sg_copy_form(414, 2621, 1, 1035);
ROLLBACK TRANSACTION;
:이 같은 SQL 쿼리 창에서 그것이 잘 실행할 수 있습니다 쿼리) 나는 다음과 같은 오류 얻을 :
[QUERY ] BEGIN TRANSACTION
[WARNING ] SELECT sg_copy_form(414, 2621, 1, 1035)
ERROR: function sg_copy_form(integer, integer, integer, integer) does not exist
LINE 1: SELECT sg_copy_form(414, 2621, 1, 1035)
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
[QUERY ] ROLLBACK TRANSACTION
이 왜입니까? pgScript에서 PL/pgSQL 함수를 호출 할 수 있습니까?
관련 사항 : PostgreSQL 8.3.14에서 pgAdmin III 1.12.2를 사용하고 있습니다.
편집 : 나는 Eelke에 의해 제안과 같이, 함수의 이름을 완전히 자격을 시도 : 일반 SQL 쿼리로 실행할 때
BEGIN TRANSACTION;
SELECT db_dev.public.sg_copy_form(414, 2621, 1, 1035);
ROLLBACK TRANSACTION;
그것은 여전히 제대로 작동하지만 지금은 나는 pgScript로 실행할 때 나는 다른 오류 메시지가 :
이[QUERY ] BEGIN TRANSACTION
[WARNING ] SELECT db_dev.public.sg_copy_form(414, 2621, 1, 1035)
ERROR: cross-database references are not implemented: db_dev.public.sg_copy_form
[QUERY ] ROLLBACK TRANSACTION
이것은 pgScript가 다른 데이터베이스의 컨텍스트 내에서 실행된다는 것을 의미합니다. –
다음과 같은 명령문 :'SELECT mydb.myschema.some_func (..);'는 절대로 작동하지 않습니다. 오류 메시지에 : 데이터베이스 간 참조가 구현되어 있지 않습니다. database-name에는 접두사를 붙일 수 없습니다. 당신은 편집에 착각해야합니다. –
위 편집의 텍스트가 정확합니다. pgAdmin의 버그 (아래 답변의 주석 참조)가 잘못된 데이터베이스에서 pgScript를 실행한다는 것을 알 수 있습니다.따라서 위의 코드를 SQL로 실행하면 접두어가 데이터베이스 이름과 일치하므로 문제가 발생하지 않습니다. 코드를 pgScript로 실행하면 다른 데이터베이스에서 실행되므로 접두사가 일치하지 않아 오류가 발생합니다 ... – gutch