docker-library / postgres

Docker Official Image packaging for Postgres
http://www.postgresql.org
MIT License
2.14k stars 1.11k forks source link

LZ4 is configured during compilation, but not available when querying the docker container #1191

Open Dutchgoose opened 5 months ago

Dutchgoose commented 5 months ago

Hello,

I am using the 16-alpine image for a docker container. I am using alpine specifically because lz4 appears to be enabled during compilation of the docker image. However, when I connect to the docker container and write SQL that depends on lz4 I get this error:

ERROR:  compression method lz4 not supported
DETAIL:  This functionality requires the server to be built with lz4 support.
HINT:  You need to rebuild PostgreSQL using --with-lz4.
SQL state: 0A000

However, in the dockerfile, LZ4 compression is enabled https://github.com/docker-library/postgres/blob/ce5bf6e7eb8f339b2a8561bf8fb5fe5d4e8c96aa/16/alpine3.19/Dockerfile#L124

Here is an example SQL query I am trying to run:

CREATE TABLE my_table (
    ...
    id bigint GENERATED ALWAYS AS IDENTITY,
    data text COMPRESSION lz4,
    ...
);

Is there some additional configuration I need to pass into the docker container? Here is a snippet of the docker-compose

postgres:
    image: postgres:16-alpine
    container_name: my_postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
    volumes:
      - type: bind
        source: ../..
        target: /my_dir
    ports:
      - "5432:5432"

I have also downgraded and tried with 15.5-alpine.

tianon commented 5 months ago

I can't actually reproduce. :sweat_smile:

I tried literally your CREATE TABLE verbatim on postgres:16-alpine and it succeeded:

CREATE TABLE my_table (
    id bigint GENERATED ALWAYS AS IDENTITY,
    data text COMPRESSION lz4
);
$ docker run -it --rm --name foo --env POSTGRES_PASSWORD=... postgres:16-alpine
...
$ docker exec -it foo psql -U postgres
psql (16.1)
Type "help" for help.

postgres=# CREATE TABLE my_table (
postgres(#     id bigint GENERATED ALWAYS AS IDENTITY,
postgres(#     data text COMPRESSION lz4
postgres(# );
CREATE TABLE
postgres=#