Voor een nieuw project ben ik bezig met een applicatie die PostgreSQL als database gebruikt. Er was al een kleine basisapplicatie die draaide op MySQL 5, deze ben ik nu aan het migreren naar de nieuwe database omgeving. Dit is voor 99% klaar. Het is de eerste keer dan ik met Postgres werk.
In de database zitten een aantal tabellen, stored procedures functies, etc. Met behulp van een O/R mapper (LLBLGen Pro 2.5) heb ik de DAL laag gegenereerd, inclusief het aanroepen van de stored procedures. Een aantal procedures accepteren een varchar als parameter. Zoals ik gewend ben van SQL Server waren in de MySQL database hier maximale lengtes aan meegegeven (90 karakters). De definitie van mijn SP is dan ook als volgt (vereenvoudigd):
LLBLGen ziet deze SP wel, maar geeft van de tweede parameter aan dat deze een maximale lengte heeft van 1073741824. Zodra ik de functie vanuit de code aanroep geeft deze dan ook de foutmelding dat de lengte niet klopt ('length for type varchar cannot exceed 10485760'). Als ik dan vervolgens ga kijken naar de definitie van de functie zoals pgAdmin deze weergeeft dan zie ik het volgende:
Met andere woorden: bij het aanmaken is de lengte qua syntax geen probleem, alleen slaat 'ie hem niet op. Blijkbaar werkt PostgreSQL op dit punt anders dan SQL Server/MySQL. Vraag is alleen, hoe krijg ik de lengte nu wel goed ingesteld?
Het grappige is dat de documentatie hier helemaal niets over zegt en dat in de meeste voorbeelden die ik op internet tegenkom in de functie definitie de lengte ook niet opgenomen is. In sommige voorbeelden staat deze dan wel weer expliciet aangegeven, precies op dezelfde manier als ik het ook had.
Als ik de query handmatig aanroep is het geen probleem. Het betreft trouwens PostgresSQL 8.3.1
In de database zitten een aantal tabellen, stored procedures functies, etc. Met behulp van een O/R mapper (LLBLGen Pro 2.5) heb ik de DAL laag gegenereerd, inclusief het aanroepen van de stored procedures. Een aantal procedures accepteren een varchar als parameter. Zoals ik gewend ben van SQL Server waren in de MySQL database hier maximale lengtes aan meegegeven (90 karakters). De definitie van mijn SP is dan ook als volgt (vereenvoudigd):
SQL:
1
2
3
4
5
6
7
8
9
10
| CREATE OR REPLACE FUNCTION spsetservername(pServerId integer, pServerName character varying(90)) RETURNS void AS $BODY$ BEGIN UPDATE tblServer SET last_name = $2 WHERE server_id = $1; END $BODY$ LANGUAGE 'plpgsql' VOLATILE; |
LLBLGen ziet deze SP wel, maar geeft van de tweede parameter aan dat deze een maximale lengte heeft van 1073741824. Zodra ik de functie vanuit de code aanroep geeft deze dan ook de foutmelding dat de lengte niet klopt ('length for type varchar cannot exceed 10485760'). Als ik dan vervolgens ga kijken naar de definitie van de functie zoals pgAdmin deze weergeeft dan zie ik het volgende:
SQL:
1
| CREATE OR REPLACE FUNCTION spsetservername(pServerId integer, pServerName character varying) |
Met andere woorden: bij het aanmaken is de lengte qua syntax geen probleem, alleen slaat 'ie hem niet op. Blijkbaar werkt PostgreSQL op dit punt anders dan SQL Server/MySQL. Vraag is alleen, hoe krijg ik de lengte nu wel goed ingesteld?
Het grappige is dat de documentatie hier helemaal niets over zegt en dat in de meeste voorbeelden die ik op internet tegenkom in de functie definitie de lengte ook niet opgenomen is. In sommige voorbeelden staat deze dan wel weer expliciet aangegeven, precies op dezelfde manier als ik het ook had.
Als ik de query handmatig aanroep is het geen probleem. Het betreft trouwens PostgresSQL 8.3.1
Programmer's Drinking Song: 99 little bugs in the code, 99 bugs in the code, Fix one bug, compile it again, 100 little bugs in the code. (go to start if bugs>0)