mirror of
https://github.com/postgres/postgres.git
synced 2026-02-24 18:37:22 -05:00
Add a function plpy.cursor that is similar to plpy.execute but uses an SPI cursor to avoid fetching the entire result set into memory. Jan Urbański, reviewed by Steve Singer
80 lines
2.7 KiB
Text
80 lines
2.7 KiB
Text
-- first some tests of basic functionality
|
|
CREATE EXTENSION plpython2u;
|
|
-- really stupid function just to get the module loaded
|
|
CREATE FUNCTION stupid() RETURNS text AS 'return "zarkon"' LANGUAGE plpythonu;
|
|
select stupid();
|
|
stupid
|
|
--------
|
|
zarkon
|
|
(1 row)
|
|
|
|
-- check 2/3 versioning
|
|
CREATE FUNCTION stupidn() RETURNS text AS 'return "zarkon"' LANGUAGE plpython2u;
|
|
select stupidn();
|
|
stupidn
|
|
---------
|
|
zarkon
|
|
(1 row)
|
|
|
|
-- test multiple arguments
|
|
CREATE FUNCTION argument_test_one(u users, a1 text, a2 text) RETURNS text
|
|
AS
|
|
'keys = list(u.keys())
|
|
keys.sort()
|
|
out = []
|
|
for key in keys:
|
|
out.append("%s: %s" % (key, u[key]))
|
|
words = a1 + " " + a2 + " => {" + ", ".join(out) + "}"
|
|
return words'
|
|
LANGUAGE plpythonu;
|
|
select argument_test_one(users, fname, lname) from users where lname = 'doe' order by 1;
|
|
argument_test_one
|
|
-----------------------------------------------------------------------
|
|
jane doe => {fname: jane, lname: doe, userid: 1, username: j_doe}
|
|
john doe => {fname: john, lname: doe, userid: 2, username: johnd}
|
|
willem doe => {fname: willem, lname: doe, userid: 3, username: w_doe}
|
|
(3 rows)
|
|
|
|
-- check module contents
|
|
CREATE FUNCTION module_contents() RETURNS text AS
|
|
$$
|
|
contents = list(filter(lambda x: not x.startswith("__"), dir(plpy)))
|
|
contents.sort()
|
|
return ", ".join(contents)
|
|
$$ LANGUAGE plpythonu;
|
|
select module_contents();
|
|
module_contents
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
Error, Fatal, SPIError, cursor, debug, error, execute, fatal, info, log, notice, prepare, quote_ident, quote_literal, quote_nullable, spiexceptions, subtransaction, warning
|
|
(1 row)
|
|
|
|
CREATE FUNCTION elog_test() RETURNS void
|
|
AS $$
|
|
plpy.debug('debug')
|
|
plpy.log('log')
|
|
plpy.info('info')
|
|
plpy.info(37)
|
|
plpy.info()
|
|
plpy.info('info', 37, [1, 2, 3])
|
|
plpy.notice('notice')
|
|
plpy.warning('warning')
|
|
plpy.error('error')
|
|
$$ LANGUAGE plpythonu;
|
|
SELECT elog_test();
|
|
INFO: info
|
|
CONTEXT: PL/Python function "elog_test"
|
|
INFO: 37
|
|
CONTEXT: PL/Python function "elog_test"
|
|
INFO: ()
|
|
CONTEXT: PL/Python function "elog_test"
|
|
INFO: ('info', 37, [1, 2, 3])
|
|
CONTEXT: PL/Python function "elog_test"
|
|
NOTICE: notice
|
|
CONTEXT: PL/Python function "elog_test"
|
|
WARNING: warning
|
|
CONTEXT: PL/Python function "elog_test"
|
|
ERROR: plpy.Error: error
|
|
CONTEXT: Traceback (most recent call last):
|
|
PL/Python function "elog_test", line 10, in <module>
|
|
plpy.error('error')
|
|
PL/Python function "elog_test"
|