C++ 如何从pqxx调用重载的远程过程

C++ 如何从pqxx调用重载的远程过程,c++,postgresql,stored-procedures,libpqxx,C++,Postgresql,Stored Procedures,Libpqxx,如何从pqxx调用重载的远程过程 程序,例如: CREATE OR REPLACE FUNCTION foo(str text) RETURNS text AS $$ BEGIN RETURN 'text'; END; $$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION foo(num integer) RETURNS text AS $$ BEGIN RETURN 'int'; END; $$ LANGUAGE pl

如何从pqxx调用重载的远程过程

程序,例如:

CREATE OR REPLACE FUNCTION foo(str text) RETURNS text AS $$
BEGIN    
    RETURN 'text';
END;
$$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION foo(num integer) RETURNS text AS $$
BEGIN    
    RETURN 'int';
END;
$$ LANGUAGE plpgsql;
C++代码:

pqxx::connection connection(/* credentials */);

std::string query_mark = "test_procedure_mark";
connection.prepare(query_mark, "SELECT foo($1);");

//first case
pqxx::work work(connection);
pqxx::result res = work.prepared(query_mark)("text").exec();
work.commit();
std::string ans = res[0][0].as(std::string(""));  //ans here "text"

//second case
pqxx::work work(connection);
pqxx::result res = work.prepared(query_mark)(1).exec();
work.commit();
std::string ans = res[0][0].as(std::string("")); //ans here "text"
如何从C++代码中调用“FO(num整数)”?在示例中,“ans”中的期望结果“int”

psql.exe输出:

选择foo(1);返回“int”

选择foo(“测试”);返回“文本”


提前谢谢。

我认为你不能用一个事先准备好的陈述来解决这个问题

您可以在libpqxx 3.1(请参阅)中设置每个参数的处理方式,如:

但我看不到这一点

或者,您可以在PostgreSQL端将参数强制转换为所需的类型,方法是:

connection.prepare(query_mark_text, "SELECT foo($1::text);");
connection.prepare(query_mark_int,  "SELECT foo($1::int);");

我不能使用pqxx v4.0中的第一个示例。1@FrozenHeart感谢您的提醒,更新了我的答案。看起来(当前)
libpqxx
根本不处理参数类型:--如果paramTypes为NULL,或者数组中的任何特定元素为零,服务器将数据类型分配给参数符号,方法与分配非类型化文字字符串的方法相同。
connection.prepare(query_mark_text, "SELECT foo($1::text);");
connection.prepare(query_mark_int,  "SELECT foo($1::int);");