1111
1212-include (" pgo_internal.hrl" ).
1313-include_lib (" pg_types/include/pg_types.hrl" ).
14+ -include_lib (" kernel/include/logger.hrl" ).
1415
1516-record (data , {pool :: atom (),
1617 pool_config :: pgo :pool_config (),
@@ -62,9 +63,13 @@ terminate(_, _, _Data) ->
6263load (Pool , LastReload , RequestTime , PoolConfig ) when LastReload < RequestTime ->
6364 try pgo_handler :open (Pool , PoolConfig ) of
6465 {ok , Conn = # conn {parameters = Parameters }} ->
65- TypeInfos = load_and_update_types (Conn , Pool ),
66- _ = pg_types :update (Pool , TypeInfos , Parameters ),
67- TypeInfos ;
66+ case load_and_update_types (Conn , Pool ) of
67+ failed ->
68+ failed ;
69+ TypeInfos ->
70+ _ = pg_types :update (Pool , TypeInfos , Parameters ),
71+ TypeInfos
72+ end ;
6873 {error , _ } ->
6974 failed
7075 catch
@@ -86,22 +91,27 @@ load(_, _, _, _) ->
8691
8792load_and_update_types (Conn , Pool ) ->
8893 try
89- {ok , Oids } = pgo_handler :simple_query (Conn , ? BOOTSTRAP_QUERY ),
90- [# type_info {oid = binary_to_integer (Oid ),
91- pool = Pool ,
92- name = binary :copy (Name ),
93- typsend = binary :copy (Send ),
94- typreceive = binary :copy (Receive ),
95- typlen = binary_to_integer (Len ),
96- output = binary :copy (Output ),
97- input = binary :copy (Input ),
98- elem_oid = binary_to_integer (ArrayOid ),
99- base_oid = binary_to_integer (BaseOid ),
100- comp_oids = parse_array_oids (CompOids )}
101- || [Oid , Name , Send , Receive , Len , Output , Input , ArrayOid , BaseOid , CompOids ] <- Oids ]
94+ case pgo_handler :simple_query (Conn , ? BOOTSTRAP_QUERY ) of
95+ {ok , Oids } ->
96+ [# type_info {oid = binary_to_integer (Oid ),
97+ pool = Pool ,
98+ name = binary :copy (Name ),
99+ typsend = binary :copy (Send ),
100+ typreceive = binary :copy (Receive ),
101+ typlen = binary_to_integer (Len ),
102+ output = binary :copy (Output ),
103+ input = binary :copy (Input ),
104+ elem_oid = binary_to_integer (ArrayOid ),
105+ base_oid = binary_to_integer (BaseOid ),
106+ comp_oids = parse_array_oids (CompOids )}
107+ || [Oid , Name , Send , Receive , Len , Output , Input , ArrayOid , BaseOid , CompOids ] <- Oids ];
108+ {error , {pgo_error , PgoError }} ->
109+ ? LOG_WARNING (" Unable to load type information. query failed with error: ~p " , [PgoError ]),
110+ failed
111+ end
102112 catch
103- _ : _ : _ ->
104-
113+ Class : Reason : Stacktrace ->
114+ ? LOG_WARNING ( " Unable to load type information. pgo will not function properly: ~s " , [ erl_error : format_exception ( Class , Reason , Stacktrace )]),
105115 failed
106116 after
107117 pgo_handler :close (Conn )
0 commit comments