mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	This provides a mechanism for specifying conversions between SQL data types and procedural languages. As examples, there are transforms for hstore and ltree for PL/Perl and PL/Python. reviews by Pavel Stěhule and Andres Freund
		
			
				
	
	
		
			46 lines
		
	
	
		
			977 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			977 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
CREATE EXTENSION plpython2u;
 | 
						|
CREATE EXTENSION ltree_plpython2u;
 | 
						|
CREATE FUNCTION test1(val ltree) RETURNS int
 | 
						|
LANGUAGE plpythonu
 | 
						|
TRANSFORM FOR TYPE ltree
 | 
						|
AS $$
 | 
						|
plpy.info(repr(val))
 | 
						|
return len(val)
 | 
						|
$$;
 | 
						|
SELECT test1('aa.bb.cc'::ltree);
 | 
						|
INFO:  ['aa', 'bb', 'cc']
 | 
						|
CONTEXT:  PL/Python function "test1"
 | 
						|
 test1 
 | 
						|
-------
 | 
						|
     3
 | 
						|
(1 row)
 | 
						|
 | 
						|
CREATE FUNCTION test1n(val ltree) RETURNS int
 | 
						|
LANGUAGE plpython2u
 | 
						|
TRANSFORM FOR TYPE ltree
 | 
						|
AS $$
 | 
						|
plpy.info(repr(val))
 | 
						|
return len(val)
 | 
						|
$$;
 | 
						|
SELECT test1n('aa.bb.cc'::ltree);
 | 
						|
INFO:  ['aa', 'bb', 'cc']
 | 
						|
CONTEXT:  PL/Python function "test1n"
 | 
						|
 test1n 
 | 
						|
--------
 | 
						|
      3
 | 
						|
(1 row)
 | 
						|
 | 
						|
CREATE FUNCTION test2() RETURNS ltree
 | 
						|
LANGUAGE plpythonu
 | 
						|
TRANSFORM FOR TYPE ltree
 | 
						|
AS $$
 | 
						|
return ['foo', 'bar', 'baz']
 | 
						|
$$;
 | 
						|
-- plpython to ltree is not yet implemented, so this will fail,
 | 
						|
-- because it will try to parse the Python list as an ltree input
 | 
						|
-- string.
 | 
						|
SELECT test2();
 | 
						|
ERROR:  syntax error at position 0
 | 
						|
CONTEXT:  while creating return value
 | 
						|
PL/Python function "test2"
 |