| From: | Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com> | 
|---|---|
| To: | Ildus Kurbangaliev <i(dot)kurbangaliev(at)postgrespro(dot)ru> | 
| Cc: | pgsql-hackers(at)postgresql(dot)org, Ildar Musin <i(dot)musin(at)postgrespro(dot)ru> | 
| Subject: | Re: [HACKERS] Custom compression methods | 
| Date: | 2017-11-23 20:54:32 | 
| Message-ID: | 57daf28d-ed76-c364-a9ca-65d0ff71a36f@2ndquadrant.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-hackers | 
Hi,
On 11/23/2017 10:38 AM, Ildus Kurbangaliev wrote:
> On Tue, 21 Nov 2017 18:47:49 +0100
> Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com> wrote:
> 
>>>   
>>
>> Hmmm, it still doesn't work for me. See this:
>>
>>     test=# create extension pg_lz4 ;
>>     CREATE EXTENSION
>>     test=# create table t_lz4 (v text compressed lz4);
>>     CREATE TABLE
>>     test=# create table t_pglz (v text);
>>     CREATE TABLE
>>     test=# insert into t_lz4 select repeat(md5(1::text),300);
>>     INSERT 0 1
>>     test=# insert into t_pglz select * from t_lz4;
>>     INSERT 0 1
>>     test=# drop extension pg_lz4 cascade;
>>     NOTICE:  drop cascades to 2 other objects
>>     DETAIL:  drop cascades to compression options for lz4
>>     drop cascades to table t_lz4 column v
>>     DROP EXTENSION
>>     test=# \c test
>>     You are now connected to database "test" as user "user".
>>     test=# insert into t_lz4 select repeat(md5(1::text),300);^C
>>     test=# select * from t_pglz ;
>>     ERROR:  cache lookup failed for compression options 16419
>>
>> That suggests no recompression happened.
> 
> Should be fixed in the attached patch. I've changed your extension a
> little bit according changes in the new patch (also in attachments).
> 
Hmm, this seems to have fixed it, but only in one direction. Consider this:
    create table t_pglz (v text);
    create table t_lz4 (v text compressed lz4);
    insert into t_pglz select repeat(md5(i::text),300)
    from generate_series(1,100000) s(i);
    insert into t_lz4 select repeat(md5(i::text),300)
    from generate_series(1,100000) s(i);
\d+
     Schema |  Name  | Type  | Owner | Size  | Description
    --------+--------+-------+-------+-------+-------------
     public | t_lz4  | table | user  | 12 MB |
     public | t_pglz | table | user  | 18 MB |
    (2 rows)
    truncate t_pglz;
    insert into t_pglz select * from t_lz4;
\d+
     Schema |  Name  | Type  | Owner | Size  | Description
    --------+--------+-------+-------+-------+-------------
     public | t_lz4  | table | user  | 12 MB |
     public | t_pglz | table | user  | 18 MB |
    (2 rows)
which is fine. But in the other direction, this happens
    truncate t_lz4;
    insert into t_lz4 select * from t_pglz;
     \d+
                       List of relations
     Schema |  Name  | Type  | Owner | Size  | Description
    --------+--------+-------+-------+-------+-------------
     public | t_lz4  | table | user  | 18 MB |
     public | t_pglz | table | user  | 18 MB |
    (2 rows)
which means the data is still pglz-compressed. That's rather strange, I
guess, and it should compress the data using the compression method set
for the target table instead.
regards
-- 
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Michael Paquier | 2017-11-24 00:06:14 | Re: documentation is now XML | 
| Previous Message | Tom Lane | 2017-11-23 20:39:24 | Re: documentation is now XML |