[PATCH] Add missing type conversion functions for PL/Python

From: Haozhou Wang <hawang(at)pivotal(dot)io>
To: pgsql-hackers(at)postgresql(dot)org
Cc: Paul Guo <pguo(at)pivotal(dot)io>, Hubert Zhang <hzhang(at)pivotal(dot)io>
Subject: [PATCH] Add missing type conversion functions for PL/Python
Date: 2018-01-31 03:57:12
Message-ID: CAL_NLpKXMwv2ewZbtvUzujZxMgUq++6TgNTFRnY4+Tcsx7+1GQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi All,

PL/Python already has different type conversion functions to
convert PostgreSQL datum to Python object. However, the conversion
functions from Python object to PostgreSQL datum only has Boolean,
Bytea and String functions.

In this patch, we add rest of Integer and Float related datatype conversion
functions
and can increase the performance of data conversion greatly especially
when returning a large array.

We did a quick test about the performance of returning array in PL/Python:

The following UDF is used for test:

```
CREATE OR REPLACE FUNCTION pyoutfloat8(num int) RETURNS float8[] AS $$
return [x/3.0 for x in range(num)]
$$ LANGUAGE plpythonu;
```

The test command is

```
select count(pyoutfloat8(n));
```

The count is used for avoid large output, where n is the number of element
in returned array, and the size is from 1.5k to15m.

Size of Array 1.5k | 15k |
150k | 1.5m | 15m |

Origin 2.324ms | 19.834ms | 194.991ms
| 1927.28ms | 19982.1ms |

With this patch 1.168ms | 3.052ms | 21.888ms |
213.39ms | 2138.5ms |

All test for both PG and PL/Python are passed.

Thanks very much.

--
Regards,
Haozhou

Attachment Content-Type Size
0001-Add-missing-type-conversion-functions-for-PL-Python.patch application/octet-stream 7.2 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Kyotaro HORIGUCHI 2018-01-31 04:09:09 Re: [HACKERS] [PATCH] Improve geometric types
Previous Message Amit Kapila 2018-01-31 03:29:31 Re: Wait for parallel workers to attach