22 releases

Uses old Rust 2015

0.5.0 Jan 19, 2024
0.4.8 Apr 18, 2023
0.4.7 Jul 18, 2022
0.4.6 Jul 15, 2018
0.2.0 Nov 21, 2015

#1 in #autogenerated

Download history 45125/week @ 2023-12-06 44354/week @ 2023-12-13 33574/week @ 2023-12-20 27990/week @ 2023-12-27 49012/week @ 2024-01-03 51597/week @ 2024-01-10 65039/week @ 2024-01-17 57494/week @ 2024-01-24 63286/week @ 2024-01-31 58061/week @ 2024-02-07 58231/week @ 2024-02-14 60488/week @ 2024-02-21 60906/week @ 2024-02-28 64156/week @ 2024-03-06 60262/week @ 2024-03-13 46745/week @ 2024-03-20

242,624 downloads per month
Used in 219 crates (2 directly)

MIT/Apache

680KB
16K SLoC

C 9K SLoC // 0.3% comments Rust 7K SLoC // 0.0% comments Perl 331 SLoC // 0.2% comments

pq-sys

Autogenerated Rust bindings for libpq

Building

This repository contains direct, one-to-one mappings to the C functions provided in libpq-fe.h and postgres_ext.h. This library expects that libpq be installed on the system.

The build script of crate will attempt to find the lib path of libpq using the following methods:

  • First it will look for an environment variable in the format of PQ_LIB_DIR_{TARGET} where {TARGET} gets replaced by the Target environment variable set for cross-compilation
  • Second, if the environment variable PQ_LIB_DIR is set, it will use its value
  • If the environment variable isn't set, it tries to use pkg-config to locate it. All the config options, such as PKG_CONFIG_ALLOW_CROSS, PKG_CONFIG_ALL_STATIC etc., of the crate pkg-config apply.
  • Then, for MSVC ABI builds the build script will attempt use the library from a vcpkg installation if there is one available. You may need to set VCPKG_ROOT (or run vcpkg integrate install), set VCPKGRS_DYNAMIC=1, and run vcpkg install libpq:x64-windows. See the documentation for the vcpkg crate for more.
  • If it still can't locate the library, it will invoke the Postgres command pg_config --libdir

The build script instructs Cargo to link the library statically if the environmental variable PQ_LIB_STATIC is set. This can be useful, if targeting for a musl target. If pkg-config is being used, it's configuration options will apply.

FAQ

I'm seeing dyld: Symbol not found __cg_jpeg_resync_to_restart on macOS

This is caused when the output of pg_config --libdir is a directory that also contains libjpeg.dylib which differs from the system libjpeg. This is usually caused by install postgres via homebrew, or using postgresapp.com.

If you've installed via homebrew, you should not see this issue unless you've provided features = ["pkg-config"]. You can work around the issue by exporting PQ_LIB_DIR="$(brew --prefix postgres)/lib".

If you've installed postgresql using postgresapp.com, you will not be able to run your binaries using cargo run or cargo test. You can compile the binary manually via cargo build and then run /target/debug/yourapp. You can also manually create a directory that contains only a symlink to libpq.dylib and nothing else, then export PQ_LIB_DIR to that directory. It is recommended that you do not use postgresapp.com.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies