pgpdf

PDF type with meta admin & Full-Text Search

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
3530
pgpdf
pgpdf
0.1.0
TYPE
GPL-3.0
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--sLdtr
No
Yes
Yes
Yes
yes
yes
Relationships
See Also
pgjq
pgjwt
prefix
semver
unit
pglite_fusion
md5hash
asn1oid

Packages

TypeRepoVersionPG Major AvailabilityPackage PatternDependencies
EL
PIGSTY
0.1.0
18
17
16
15
14
13
pgpdf_$v*-
Debian
PIGSTY
0.1.0
18
17
16
15
14
13
postgresql-$v-pgpdf-
Linux / PGPG18PG17PG16PG15PG14PG13
el8.x86_64
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
el8.aarch64
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
el9.x86_64
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
el9.aarch64
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
el10.x86_64
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
el10.aarch64
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
d12.x86_64
MISS
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
d12.aarch64
MISS
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
d13.x86_64
MISS
MISS
MISS
MISS
MISS
MISS
d13.aarch64
MISS
MISS
MISS
MISS
MISS
MISS
u22.x86_64
MISS
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
u22.aarch64
MISS
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
u24.x86_64
MISS
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
u24.aarch64
MISS
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PIGSTY 0.1.0
PackageVersionOSORGSIZEFile URL
pgpdf_180.1.0el8.x86_64pigsty18.4 KiBpgpdf_18-0.1.0-1PIGSTY.el8.x86_64.rpm
pgpdf_180.1.0el8.x86_64pgdg15.4 KiBpgpdf_18-0.1.0-1PGDG.rhel8.x86_64.rpm
pgpdf_180.1.0el8.aarch64pigsty18.0 KiBpgpdf_18-0.1.0-1PIGSTY.el8.aarch64.rpm
pgpdf_180.1.0el8.aarch64pgdg14.8 KiBpgpdf_18-0.1.0-1PGDG.rhel8.aarch64.rpm
pgpdf_180.1.0el9.x86_64pigsty18.2 KiBpgpdf_18-0.1.0-1PIGSTY.el9.x86_64.rpm
pgpdf_180.1.0el9.x86_64pgdg15.6 KiBpgpdf_18-0.1.0-1PGDG.rhel9.x86_64.rpm
pgpdf_180.1.0el9.aarch64pigsty17.7 KiBpgpdf_18-0.1.0-1PIGSTY.el9.aarch64.rpm
pgpdf_180.1.0el9.aarch64pgdg14.9 KiBpgpdf_18-0.1.0-1PGDG.rhel9.aarch64.rpm
pgpdf_180.1.0el10.x86_64pigsty18.2 KiBpgpdf_18-0.1.0-1PIGSTY.el10.x86_64.rpm
pgpdf_180.1.0el10.x86_64pgdg16.0 KiBpgpdf_18-0.1.0-1PGDG.rhel10.x86_64.rpm
pgpdf_180.1.0el10.aarch64pigsty17.9 KiBpgpdf_18-0.1.0-1PIGSTY.el10.aarch64.rpm
pgpdf_180.1.0el10.aarch64pgdg15.5 KiBpgpdf_18-0.1.0-1PGDG.rhel10.aarch64.rpm
PackageVersionOSORGSIZEFile URL
pgpdf_170.1.0el8.x86_64pigsty18.4 KiBpgpdf_17-0.1.0-1PIGSTY.el8.x86_64.rpm
pgpdf_170.1.0el8.x86_64pgdg15.4 KiBpgpdf_17-0.1.0-1PGDG.rhel8.x86_64.rpm
pgpdf_170.1.0el8.aarch64pigsty18.0 KiBpgpdf_17-0.1.0-1PIGSTY.el8.aarch64.rpm
pgpdf_170.1.0el8.aarch64pgdg14.8 KiBpgpdf_17-0.1.0-1PGDG.rhel8.aarch64.rpm
pgpdf_170.1.0el9.x86_64pigsty18.2 KiBpgpdf_17-0.1.0-1PIGSTY.el9.x86_64.rpm
pgpdf_170.1.0el9.x86_64pgdg15.6 KiBpgpdf_17-0.1.0-1PGDG.rhel9.x86_64.rpm
pgpdf_170.1.0el9.aarch64pigsty17.8 KiBpgpdf_17-0.1.0-1PIGSTY.el9.aarch64.rpm
pgpdf_170.1.0el9.aarch64pgdg15.0 KiBpgpdf_17-0.1.0-1PGDG.rhel9.aarch64.rpm
pgpdf_170.1.0el10.x86_64pigsty18.2 KiBpgpdf_17-0.1.0-1PIGSTY.el10.x86_64.rpm
pgpdf_170.1.0el10.x86_64pgdg16.0 KiBpgpdf_17-0.1.0-1PGDG.rhel10.x86_64.rpm
pgpdf_170.1.0el10.aarch64pigsty17.9 KiBpgpdf_17-0.1.0-1PIGSTY.el10.aarch64.rpm
pgpdf_170.1.0el10.aarch64pgdg15.5 KiBpgpdf_17-0.1.0-1PGDG.rhel10.aarch64.rpm
postgresql-17-pgpdf0.1.0d12.x86_64pigsty26.0 KiBpostgresql-17-pgpdf_0.1.0-1PIGSTY~bookworm_amd64.deb
postgresql-17-pgpdf0.1.0d12.aarch64pigsty25.6 KiBpostgresql-17-pgpdf_0.1.0-1PIGSTY~bookworm_arm64.deb
postgresql-17-pgpdf0.1.0u22.x86_64pigsty27.4 KiBpostgresql-17-pgpdf_0.1.0-1PIGSTY~jammy_amd64.deb
postgresql-17-pgpdf0.1.0u22.aarch64pigsty27.0 KiBpostgresql-17-pgpdf_0.1.0-1PIGSTY~jammy_arm64.deb
postgresql-17-pgpdf0.1.0u24.x86_64pigsty26.2 KiBpostgresql-17-pgpdf_0.1.0-1PIGSTY~noble_amd64.deb
postgresql-17-pgpdf0.1.0u24.aarch64pigsty25.8 KiBpostgresql-17-pgpdf_0.1.0-1PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
pgpdf_160.1.0el8.x86_64pigsty18.4 KiBpgpdf_16-0.1.0-1PIGSTY.el8.x86_64.rpm
pgpdf_160.1.0el8.x86_64pgdg15.4 KiBpgpdf_16-0.1.0-1PGDG.rhel8.x86_64.rpm
pgpdf_160.1.0el8.aarch64pigsty18.0 KiBpgpdf_16-0.1.0-1PIGSTY.el8.aarch64.rpm
pgpdf_160.1.0el8.aarch64pgdg14.8 KiBpgpdf_16-0.1.0-1PGDG.rhel8.aarch64.rpm
pgpdf_160.1.0el9.x86_64pigsty18.2 KiBpgpdf_16-0.1.0-1PIGSTY.el9.x86_64.rpm
pgpdf_160.1.0el9.x86_64pgdg15.6 KiBpgpdf_16-0.1.0-1PGDG.rhel9.x86_64.rpm
pgpdf_160.1.0el9.aarch64pigsty17.8 KiBpgpdf_16-0.1.0-1PIGSTY.el9.aarch64.rpm
pgpdf_160.1.0el9.aarch64pgdg15.0 KiBpgpdf_16-0.1.0-1PGDG.rhel9.aarch64.rpm
pgpdf_160.1.0el10.x86_64pigsty18.2 KiBpgpdf_16-0.1.0-1PIGSTY.el10.x86_64.rpm
pgpdf_160.1.0el10.x86_64pgdg16.0 KiBpgpdf_16-0.1.0-1PGDG.rhel10.x86_64.rpm
pgpdf_160.1.0el10.aarch64pigsty17.9 KiBpgpdf_16-0.1.0-1PIGSTY.el10.aarch64.rpm
pgpdf_160.1.0el10.aarch64pgdg15.5 KiBpgpdf_16-0.1.0-1PGDG.rhel10.aarch64.rpm
postgresql-16-pgpdf0.1.0d12.x86_64pigsty26.0 KiBpostgresql-16-pgpdf_0.1.0-1PIGSTY~bookworm_amd64.deb
postgresql-16-pgpdf0.1.0d12.aarch64pigsty25.6 KiBpostgresql-16-pgpdf_0.1.0-1PIGSTY~bookworm_arm64.deb
postgresql-16-pgpdf0.1.0u22.x86_64pigsty27.4 KiBpostgresql-16-pgpdf_0.1.0-1PIGSTY~jammy_amd64.deb
postgresql-16-pgpdf0.1.0u22.aarch64pigsty27.0 KiBpostgresql-16-pgpdf_0.1.0-1PIGSTY~jammy_arm64.deb
postgresql-16-pgpdf0.1.0u24.x86_64pigsty26.2 KiBpostgresql-16-pgpdf_0.1.0-1PIGSTY~noble_amd64.deb
postgresql-16-pgpdf0.1.0u24.aarch64pigsty25.8 KiBpostgresql-16-pgpdf_0.1.0-1PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
pgpdf_150.1.0el8.x86_64pigsty18.4 KiBpgpdf_15-0.1.0-1PIGSTY.el8.x86_64.rpm
pgpdf_150.1.0el8.x86_64pgdg15.4 KiBpgpdf_15-0.1.0-1PGDG.rhel8.x86_64.rpm
pgpdf_150.1.0el8.aarch64pigsty17.9 KiBpgpdf_15-0.1.0-1PIGSTY.el8.aarch64.rpm
pgpdf_150.1.0el8.aarch64pgdg14.8 KiBpgpdf_15-0.1.0-1PGDG.rhel8.aarch64.rpm
pgpdf_150.1.0el9.x86_64pigsty18.2 KiBpgpdf_15-0.1.0-1PIGSTY.el9.x86_64.rpm
pgpdf_150.1.0el9.x86_64pgdg15.6 KiBpgpdf_15-0.1.0-1PGDG.rhel9.x86_64.rpm
pgpdf_150.1.0el9.aarch64pigsty17.7 KiBpgpdf_15-0.1.0-1PIGSTY.el9.aarch64.rpm
pgpdf_150.1.0el9.aarch64pgdg15.0 KiBpgpdf_15-0.1.0-1PGDG.rhel9.aarch64.rpm
pgpdf_150.1.0el10.x86_64pigsty18.2 KiBpgpdf_15-0.1.0-1PIGSTY.el10.x86_64.rpm
pgpdf_150.1.0el10.x86_64pgdg16.0 KiBpgpdf_15-0.1.0-1PGDG.rhel10.x86_64.rpm
pgpdf_150.1.0el10.aarch64pigsty17.9 KiBpgpdf_15-0.1.0-1PIGSTY.el10.aarch64.rpm
pgpdf_150.1.0el10.aarch64pgdg15.5 KiBpgpdf_15-0.1.0-1PGDG.rhel10.aarch64.rpm
postgresql-15-pgpdf0.1.0d12.x86_64pigsty26.0 KiBpostgresql-15-pgpdf_0.1.0-1PIGSTY~bookworm_amd64.deb
postgresql-15-pgpdf0.1.0d12.aarch64pigsty25.7 KiBpostgresql-15-pgpdf_0.1.0-1PIGSTY~bookworm_arm64.deb
postgresql-15-pgpdf0.1.0u22.x86_64pigsty27.5 KiBpostgresql-15-pgpdf_0.1.0-1PIGSTY~jammy_amd64.deb
postgresql-15-pgpdf0.1.0u22.aarch64pigsty27.0 KiBpostgresql-15-pgpdf_0.1.0-1PIGSTY~jammy_arm64.deb
postgresql-15-pgpdf0.1.0u24.x86_64pigsty26.2 KiBpostgresql-15-pgpdf_0.1.0-1PIGSTY~noble_amd64.deb
postgresql-15-pgpdf0.1.0u24.aarch64pigsty25.8 KiBpostgresql-15-pgpdf_0.1.0-1PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
pgpdf_140.1.0el8.x86_64pigsty18.4 KiBpgpdf_14-0.1.0-1PIGSTY.el8.x86_64.rpm
pgpdf_140.1.0el8.x86_64pgdg15.4 KiBpgpdf_14-0.1.0-1PGDG.rhel8.x86_64.rpm
pgpdf_140.1.0el8.aarch64pigsty17.9 KiBpgpdf_14-0.1.0-1PIGSTY.el8.aarch64.rpm
pgpdf_140.1.0el8.aarch64pgdg14.8 KiBpgpdf_14-0.1.0-1PGDG.rhel8.aarch64.rpm
pgpdf_140.1.0el9.x86_64pigsty18.2 KiBpgpdf_14-0.1.0-1PIGSTY.el9.x86_64.rpm
pgpdf_140.1.0el9.x86_64pgdg15.6 KiBpgpdf_14-0.1.0-1PGDG.rhel9.x86_64.rpm
pgpdf_140.1.0el9.aarch64pigsty17.7 KiBpgpdf_14-0.1.0-1PIGSTY.el9.aarch64.rpm
pgpdf_140.1.0el9.aarch64pgdg15.0 KiBpgpdf_14-0.1.0-1PGDG.rhel9.aarch64.rpm
pgpdf_140.1.0el10.x86_64pigsty18.2 KiBpgpdf_14-0.1.0-1PIGSTY.el10.x86_64.rpm
pgpdf_140.1.0el10.x86_64pgdg16.0 KiBpgpdf_14-0.1.0-1PGDG.rhel10.x86_64.rpm
pgpdf_140.1.0el10.aarch64pigsty17.9 KiBpgpdf_14-0.1.0-1PIGSTY.el10.aarch64.rpm
pgpdf_140.1.0el10.aarch64pgdg15.5 KiBpgpdf_14-0.1.0-1PGDG.rhel10.aarch64.rpm
postgresql-14-pgpdf0.1.0d12.x86_64pigsty25.9 KiBpostgresql-14-pgpdf_0.1.0-1PIGSTY~bookworm_amd64.deb
postgresql-14-pgpdf0.1.0d12.aarch64pigsty25.6 KiBpostgresql-14-pgpdf_0.1.0-1PIGSTY~bookworm_arm64.deb
postgresql-14-pgpdf0.1.0u22.x86_64pigsty27.4 KiBpostgresql-14-pgpdf_0.1.0-1PIGSTY~jammy_amd64.deb
postgresql-14-pgpdf0.1.0u22.aarch64pigsty26.9 KiBpostgresql-14-pgpdf_0.1.0-1PIGSTY~jammy_arm64.deb
postgresql-14-pgpdf0.1.0u24.x86_64pigsty26.1 KiBpostgresql-14-pgpdf_0.1.0-1PIGSTY~noble_amd64.deb
postgresql-14-pgpdf0.1.0u24.aarch64pigsty25.8 KiBpostgresql-14-pgpdf_0.1.0-1PIGSTY~noble_arm64.deb
PackageVersionOSORGSIZEFile URL
pgpdf_130.1.0el8.x86_64pigsty18.1 KiBpgpdf_13-0.1.0-1PIGSTY.el8.x86_64.rpm
pgpdf_130.1.0el8.x86_64pgdg15.1 KiBpgpdf_13-0.1.0-1PGDG.rhel8.x86_64.rpm
pgpdf_130.1.0el8.aarch64pigsty17.9 KiBpgpdf_13-0.1.0-1PIGSTY.el8.aarch64.rpm
pgpdf_130.1.0el8.aarch64pgdg14.8 KiBpgpdf_13-0.1.0-1PGDG.rhel8.aarch64.rpm
pgpdf_130.1.0el9.x86_64pigsty18.2 KiBpgpdf_13-0.1.0-1PIGSTY.el9.x86_64.rpm
pgpdf_130.1.0el9.x86_64pgdg15.6 KiBpgpdf_13-0.1.0-1PGDG.rhel9.x86_64.rpm
pgpdf_130.1.0el9.aarch64pigsty17.7 KiBpgpdf_13-0.1.0-1PIGSTY.el9.aarch64.rpm
pgpdf_130.1.0el9.aarch64pgdg14.9 KiBpgpdf_13-0.1.0-1PGDG.rhel9.aarch64.rpm
pgpdf_130.1.0el10.x86_64pigsty18.2 KiBpgpdf_13-0.1.0-1PIGSTY.el10.x86_64.rpm
pgpdf_130.1.0el10.x86_64pgdg15.9 KiBpgpdf_13-0.1.0-1PGDG.rhel10.x86_64.rpm
pgpdf_130.1.0el10.aarch64pigsty17.8 KiBpgpdf_13-0.1.0-1PIGSTY.el10.aarch64.rpm
pgpdf_130.1.0el10.aarch64pgdg15.4 KiBpgpdf_13-0.1.0-1PGDG.rhel10.aarch64.rpm
postgresql-13-pgpdf0.1.0d12.x86_64pigsty25.7 KiBpostgresql-13-pgpdf_0.1.0-1PIGSTY~bookworm_amd64.deb
postgresql-13-pgpdf0.1.0d12.aarch64pigsty25.5 KiBpostgresql-13-pgpdf_0.1.0-1PIGSTY~bookworm_arm64.deb
postgresql-13-pgpdf0.1.0u22.x86_64pigsty27.2 KiBpostgresql-13-pgpdf_0.1.0-1PIGSTY~jammy_amd64.deb
postgresql-13-pgpdf0.1.0u22.aarch64pigsty26.8 KiBpostgresql-13-pgpdf_0.1.0-1PIGSTY~jammy_arm64.deb
postgresql-13-pgpdf0.1.0u24.x86_64pigsty25.9 KiBpostgresql-13-pgpdf_0.1.0-1PIGSTY~noble_amd64.deb
postgresql-13-pgpdf0.1.0u24.aarch64pigsty25.7 KiBpostgresql-13-pgpdf_0.1.0-1PIGSTY~noble_arm64.deb

Source

pig build get pgpdf; # get pgpdf source code
pig build dep pgpdf; # install build dependencies
pig build pkg pgpdf; # build extension rpm or deb
pig build ext pgpdf; # build extension rpms

Install

To add the required PGDG / PIGSTY upstream repository, use:

pig repo add pgsql -u   # add PGDG + Pigsty repo and update cache (leave existing repos)

Install this extension with:

pig ext install pgpdf; # install by extension name, for the current active PG version
pig ext install pgpdf; # install via package alias, for the active PG version
pig ext install pgpdf -v 18;   # install for PG 18
pig ext install pgpdf -v 17;   # install for PG 17
pig ext install pgpdf -v 16;   # install for PG 16
pig ext install pgpdf -v 15;   # install for PG 15
pig ext install pgpdf -v 14;   # install for PG 14
pig ext install pgpdf -v 13;   # install for PG 13

Create this extension with:

CREATE EXTENSION pgpdf;

Usage

The actual PDF parsing is done by poppler.

This allows you to work with PDFs in an ACID-compliant way. The usual alternative relies on external scripts or services which can easily make your data ingestion pipeline brittle and leave your raw data out-of-sync.

Download some PDFs.

wget https://wiki.postgresql.org/images/e/ea/PostgreSQL_Introduction.pdf -O /tmp/pgintro.pdf
wget https://pdfobject.com/pdf/sample.pdf -O /tmp/sample.pdf

You can create a pdf type, by casting either a text filepath or bytea column.

CREATE EXTENSION pgpdf;
SELECT '/tmp/pgintro.pdf'::pdf;
                                       pdf                                        
----------------------------------------------------------------------------------
 PostgreSQL Introduction                                                         +
 Digoal.Zhou                                                                     +
 7/20/2011Catalog                                                                +
  PostgreSQL Origin 

If you don’t have the PDF file in your filesystem, but have already stored its content in a bytea column, you can just cast it to pdf.

SELECT pg_read_binary_file('/tmp/pgintro.pdf')::bytea::pdf;

Examples

Create a table with a pdf column:

CREATE TABLE pdfs(name text primary key, doc pdf);

INSERT INTO pdfs VALUES ('pgintro', '/tmp/pgintro.pdf');
INSERT INTO pdfs VALUES ('pgintro', '/tmp/sample.pdf');

Parsing and validation should happen automatically. The files will be read from the disk only once!

Note

The filepath should be accessible by the postgres process / user! That’s different than the user running psql. If you don’t understand what this means, as your DBA!

String Functions and Operators

Standard Postgres String Functions and Operators should work as usual:

SELECT 'Below is the PDF we received ' || '/tmp/pgintro.pdf'::pdf;
SELECT upper('/tmp/pgintro.pdf'::pdf::text);
SELECT name
FROM pdfs
WHERE doc::text LIKE '%Postgres%';

Full-Text Search (FTS)

You can also perform full-text search (FTS), since you can work on a pdf file like normal text.

SELECT '/tmp/pgintro.pdf'::pdf::text @@ to_tsquery('postgres');
 ?column? 
----------
 t
(1 row)
SELECT '/tmp/pgintro.pdf'::pdf::text @@ to_tsquery('oracle');
 ?column? 
----------
 f
(1 row)

Document similarity with pg_trgm

You can use pg_trgm to get the similarity between two documents:

CREATE EXTENSION pg_trgm;

SELECT similarity('/tmp/pgintro.pdf'::pdf::text, '/tmp/sample.pdf'::pdf::text);

Metadata

The following functions are available:

  • pdf_title(pdf) → text

  • pdf_author(pdf) → text

  • pdf_num_pages(pdf) → integer

    Total number of pages in the document

  • pdf_page(pdf, integer) → text

    Get the i-th page as text

  • pdf_creator(pdf) → text

  • pdf_keywords(pdf) → text

  • pdf_metadata(pdf) → text

  • pdf_version(pdf) → text

  • pdf_subject(pdf) → text

  • pdf_creation(pdf) → timestamp

  • pdf_modification(pdf) → timestamp

SELECT pdf_title('/tmp/pgintro.pdf');
        pdf_title        
-------------------------
 PostgreSQL Introduction
(1 row)
SELECT pdf_author('/tmp/pgintro.pdf');
 pdf_author 
------------
 周正中
(1 row)

Getting a subset of pages

SELECT pdf_num_pages('/tmp/pgintro.pdf');
 pdf_num_pages 
---------------
            24
(1 row)
SELECT pdf_page('/tmp/pgintro.pdf', 1);
           pdf_page           
------------------------------
 Catalog                     +
  PostgreSQL Origin         +
  Layout                    +
  Features                  +
  Enterprise Class Attribute+
  Case
(1 row)
SELECT pdf_subject('/tmp/pgintro.pdf');
 pdf_subject 
-------------
 
(1 row)
SELECT pdf_creation('/tmp/pgintro.pdf');
       pdf_creation       
--------------------------
 Wed Jul 20 11:13:37 2011
(1 row)
SELECT pdf_modification('/tmp/pgintro.pdf');
     pdf_modification     
--------------------------
 Wed Jul 20 11:13:37 2011
(1 row)
SELECT pdf_creator('/tmp/pgintro.pdf');
            pdf_creator             
------------------------------------
 Microsoft® Office PowerPoint® 2007
(1 row)
SELECT pdf_metadata('/tmp/pgintro.pdf');
 pdf_metadata 
--------------
 
(1 row)
SELECT pdf_version('/tmp/pgintro.pdf');
 pdf_version 
-------------
 PDF-1.5
(1 row)

Installation

Install poppler dependencies

Linux

sudo apt install -y libpoppler-glib-dev pkg-config

Homebrew/MacOS

brew install poppler pkgconf
cd /tmp
git clone https://github.com/Florents-Tselai/pgpdf.git
cd pgpdf
make
make install # may need sudo

After the installation, in a session:

CREATE EXTENSION pgpdf;

Docker

Get the Docker image with:

docker pull florents/pgpdf:pg17

This adds pgpdf to the Postgres image (replace 17 with your Postgres server version, and run it the same way).

Run the image in a container.

docker run --name pgpdf -p 5432:5432 -e POSTGRES_PASSWORD=pass florents/pgpdf:pg17

Through another terminal, connect to the running server (container).

PGPASSWORD=pass psql -h localhost -p 5432 -U postgres

Warning

Reading arbitrary binary data (PDF) into your database can pose security risks. Only use this for files you trust.

Last updated on