--load python3 if want to load python2: create extension plpythonu
CREATE EXTENSION plpython3u;
CREATE EXTENSION
CREATE TABLE temp (a INT ,b INT) ;
CREATE TABLE
INSERT INTO temp VALUES (1,2),(2,3),(3,4),(4,5),(5,6);
INSERT 0 5
CREATE OR REPLACE FUNCTION pymax(a INT, b INT)
RETURNS INT
LANGUAGE plpython3u FENCED
AS $$
if a > b:
    return a;
else:
    return b;
$$;
CREATE FUNCTION
SELECT pymax(1, 2);
 pymax
-------
     2
(1 row)

SELECT pymax(1 + 3, 2);
 pymax
-------
     4
(1 row)

SELECT pymax(a, b) FROM temp;
 pymax
-------
     2
     3
     4
     5
     6
(5 rows)

CREATE OR REPLACE FUNCTION pyless(a INT, b INT)
RETURNS INT
LANGUAGE plpython3u FENCED
AS $$
import numpy
if a < b:
    return a;
else:
    return b;
$$;
CREATE FUNCTION

SELECT pyless(1, 2);
 pyless
--------
      1
(1 row)

SELECT pyless(1 + 3, 2);
 pyless
--------
      2
(1 row)

SELECT pyless(a, b) FROM temp;
 pyless
--------
      1
      2
      3
      4
      5
(5 rows)

CREATE OR REPLACE FUNCTION pyequal(a INT, b INT)
RETURNS BOOLEAN
LANGUAGE plpython3u FENCED
AS $$
return a==b
$$;
CREATE FUNCTION

SELECT pyequal(1, 2);
 pyequal
---------
 f
(1 row)

SELECT pyequal(1 + 3, 2 + 2);
 pyequal
---------
 t
(1 row)

SELECT pyequal(a, b) FROM temp;
 pyequal
---------
 f
 f
 f
 f
 f
(5 rows)

CREATE OR REPLACE FUNCTION printa()
RETURNS VARCHAR
LANGUAGE plpython3u FENCED
AS $$
return 'AAAA'
$$;
CREATE FUNCTION

SELECT printa();
 printa
--------
 AAAA
(1 row)

CREATE OR REPLACE FUNCTION printb()
RETURNS VARCHAR
LANGUAGE plpython3u FENCED
AS $$
return 'BBBB'
$$;
CREATE FUNCTION

SELECT printb();
 printb
--------
 BBBB
(1 row)

CREATE TABLE employee (name TEXT, salary INTEGER, age INTEGER);
CREATE TABLE

INSERT INTO employee VALUES ('tom', 2000, 20),('jerry', 3000, 25);
INSERT 0 2

CREATE OR REPLACE FUNCTION make_pair (name TEXT, value INTEGER)
RETURNS TEXT
AS $$
  return  "name:" +  name + ", value:" + str(value)
$$ LANGUAGE plpython3u FENCED;
CREATE FUNCTION

SELECT make_pair(name, age) FROM employee;
      make_pair
----------------------
 name:tom, value:20
 name:jerry, value:25
(2 rows)

-- cleanup tables and functions in random order
DROP TABLE temp;
DROP TABLE employee;
DROP FUNCTION pymax;
DROP FUNCTION pyless;
DROP FUNCTION printa;
DROP FUNCTION printb;
DROP FUNCTION make_pair;

SELECT 'DB4AI PLPYTHON FENCED UDF TEST COMPLETED';
                 ?column?
------------------------------------------
 DB4AI PLPYTHON FENCED UDF TEST COMPLETED
(1 row)