\! gs_ktool -d all
DELETE ALL

\! gs_ktool -g
GENERATE
1
DROP CLIENT MASTER KEY IF EXISTS out_cmk CASCADE;
NOTICE:  client master key "out_cmk" does not exist
CREATE CLIENT MASTER KEY out_cmk WITH ( KEY_STORE = gs_ktool , KEY_PATH = "gs_ktool/1" , ALGORITHM = AES_256_CBC);
CREATE COLUMN ENCRYPTION KEY out_cek WITH VALUES (CLIENT_MASTER_KEY = out_cmk, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);
CREATE TABLE t_processed (name text, val INT ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = out_cek, ENCRYPTION_TYPE = DETERMINISTIC), val2 INT);
INSERT INTO t_processed VALUES('name', 1, 2);
CREATE TABLE t_processed_b (name text, val bytea ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = out_cek, ENCRYPTION_TYPE = DETERMINISTIC), val2 INT);
INSERT INTO t_processed_b VALUES('name', 'test', 2);
CREATE OR REPLACE FUNCTION f_processed_out_1param(out1 OUT int) AS 'SELECT val from t_processed LIMIT 1' LANGUAGE SQL; 
CREATE OR REPLACE FUNCTION f_processed_out(out1 OUT int, out2 OUT int) AS 'SELECT val, val2 from t_processed LIMIT 1' LANGUAGE SQL;
CREATE OR REPLACE FUNCTION f_processed_out_b(out1 OUT bytea, out2 OUT int) AS 'SELECT val, val2 from t_processed_b LIMIT 1' LANGUAGE SQL;
CREATE OR REPLACE FUNCTION f_processed_out_plpgsql(out out1 int, out out2 int) 
as $$ 
begin 
  select val, val2 INTO out1, out2 from t_processed; 
end;$$ 
LANGUAGE plpgsql; 
CREATE OR REPLACE FUNCTION f_processed_out_plpgsql2(out out1 t_processed.val%TYPE, out out2 t_processed.val%TYPE) 
as $$ 
begin 
  select val, val2 INTO out1, out2 from t_processed; 
end;$$ 
LANGUAGE plpgsql; 
NOTICE:  type reference t_processed.val%TYPE converted to integer
NOTICE:  type reference t_processed.val%TYPE converted to integer
CREATE OR REPLACE FUNCTION f_processed_aliases_plpgsql(out out1 int, out out2 int) as  
$BODY$ 
DECLARE  
 val1 ALIAS FOR out1; 
begin 
  select val, val2 INTO val1, out2 from t_processed; 
end; 
$BODY$
LANGUAGE plpgsql; 
select proname, prorettype, proallargtypes, prorettype_orig, proallargtypes_orig FROM pg_proc LEFT JOIN gs_encrypted_proc ON pg_proc.
Oid = gs_encrypted_proc.func_id WHERE proname IN ('f_processed_out', 'f_processed_out_plpgsql', 'f_processed_out_plpgsql2', 'f_processed_aliases_plpgsql', 'f_processed_out_1param') ORDER BY proname;
           proname           | prorettype | proallargtypes | prorettype_orig | proallargtypes_orig 
-----------------------------+------------+----------------+-----------------+---------------------
 f_processed_aliases_plpgsql |       2249 | {4402,23}      |               0 | {23,-1}
 f_processed_out             |       2249 | {4402,23}      |               0 | {23,-1}
 f_processed_out_1param      |       4402 | {4402}         |              23 | {23}
 f_processed_out_plpgsql     |       2249 | {4402,23}      |               0 | {23,-1}
 f_processed_out_plpgsql2    |       2249 | {4402,23}      |               0 | {23,-1}
(5 rows)

SELECT f_processed_out_1param();
 f_processed_out_1param 
------------------------
                      1
(1 row)

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

SELECT f_processed_out_b();
 f_processed_out_b 
-------------------
 ("\\x74657374",2)
(1 row)

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

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

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

DROP FUNCTION f_processed_out_b;
DROP TABLE t_processed CASCADE;
DROP TABLE t_processed_b CASCADE;
DROP FUNCTION f_processed_out_1param;
DROP FUNCTION f_processed_out;
DROP FUNCTION f_processed_out_plpgsql;
DROP FUNCTION f_processed_out_plpgsql2;
DROP FUNCTION f_processed_aliases_plpgsql;
DROP COLUMN ENCRYPTION KEY out_cek;
DROP CLIENT MASTER KEY out_cmk;
\! gs_ktool -d all
DELETE ALL
 1