[C++/PostgreSQL] stored function wordt niet gevonden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Topicstarter
Ik heb een stored function gemaakt in pgadmin:

SQL:
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE FUNCTION myfunc()
  RETURNS integer AS
$$
BEGIN
    return 42;
END;
$$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION myfunc() OWNER TO postgres;


Als ik die nu aanroep in de query editor:

SQL:
1
SELECT myfunc()


Geeft hij prima een rij terug met "42".

Als ik nu dezelfde aanroep doe in C++ met libpq kan hij de functie niet vinden:

C++:
1
2
3
4
ResultSetPtr res(PQexec(
        m_conn,
        "SELECT myfunc()"
), freeResultSet);


Dat geeft:

code:
1
2
3
4
ERROR:  function myfunc() does not exist
LINE 1: SELECT myfunc()
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.


Maar op dezelfde manier, vanuit C++, zoiets:
C++:
1
2
3
4
ResultSetPtr res(PQexec(
        m_conn,
        "SELECT now()"
), freeResultSet);

werkt gewoon op de bestaande, standaard functie now(). De connectie werkt dus wel. Ik gewoon normale queries draaien.

Heeft iemand een idee hoe dit kan? Waarom kan hij geen enkele stored function vinden vanuit libpq met PQexec(), of PQexecParams(), terwijl dit WEL lukt in de pgadmin query editor?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Onder MSSQL gebruik je "select dbo.myfunc()"; is het onder Postgresql niet iets soortgelijks? En je hebt de juiste DB geselecteerd? /dommevragenmodus :P

Edit: en anders moet je misschien je focus even leggen op "You might need to add explicit type casts." ??

[ Voor 40% gewijzigd door RobIII op 23-02-2009 21:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Werk je wel vanuit het goede database/schema in C++? NOW() is een global functie die binnen elke database/schema werkt. Voor een normale functie moet je wel de goede database "gebruiken".

Hoe roep je je PQsetdb aan? Met welke "pseudo" variablen?

[ Voor 14% gewijzigd door eghie op 23-02-2009 21:40 ]


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Topicstarter
Bedankt, jullie hebben me op de goede weg geholpen :) Het bleek dat ik de connection string uit een file haalde, maar die bestond niet, dus werd er een lege string gebruikt. De lege string connect met alle default waardes naar de verkeerde database...