From: | Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> |
---|---|
To: | Larry Sevilla <sevilla(dot)larry(dot)oss(at)gmail(dot)com>, Jonathan Rogers <jrogers(at)socialserve(dot)com> |
Cc: | psycopg(at)postgresql(dot)org |
Subject: | Re: Getting return value from .callproc |
Date: | 2016-06-28 13:58:45 |
Message-ID: | a8c78049-6119-1cbb-e255-89cd8624ab2d@aklaver.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | psycopg |
On 06/27/2016 09:58 PM, Larry Sevilla wrote:
> psql postgres
> gives err:
> psql; FATAL: role "root" does not exist. (as root)
> psql; FATAL: role "user" does not exist. (as user)
If you do not specify the -U switch(user) for psql it will use the
system user that you are logged in as. If that user does not have a
Postgres role then you get the above. To avoid the above and get the
behavior you are getting with sudo, do the following as any system user:
psql -U postgres -d postgres
See:
https://www.postgresql.org/docs/9.4/static/app-psql.html
Usage
Connecting to a Database
By the way the -d postgres means you are connecting to one of the
Postgres 'system' databases. That is not really where you want to create
objects. I would suggest creating you own database in the cluster for
doing your work.
https://www.postgresql.org/docs/9.4/static/sql-createdatabase.html
>
> >
> >
> > But if I use Python with psycopg2
> > -----
> > import psycopg2
> >
> > conn=psycopg2.connect(host='localhost',database='postgres',user='postgres',password='postgres')
> > cur=conn.cursor()
> >
> > retval = cur.callproc('personnelinsert',[34567,'Galilei, Galileo'])
> >
> > conn.commit()
> >
> > cur.close()
> > conn.close()
> >
> > print(retval)
> > -----
> > retval = [34567,'Galilei, Galileo']
> > (I'm expecting retval/serialid value of 3, not the parameters I sent)
> >
> >
> > Q1: From Python, is there a way I can retrieve the value of
> > "retval/serialid" of my UDF?
>
> Return values from Postgres functions are just like other expression
> values. The most straightforward way to retrieve your function's return
> value would be something like this:
>
> cur.execute('select personnelinsert(%s, %s)',[34567,'Galilei, Galileo'])
> retval = cur.fetchone()[0]
This is what I do also.
--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com
From | Date | Subject | |
---|---|---|---|
Next Message | Larry Sevilla | 2016-06-29 04:18:38 | Re: Getting return value from .callproc |
Previous Message | Larry Sevilla | 2016-06-28 04:58:39 | Re: Getting return value from .callproc |