[package] name = "pg_search" description = "Full text search for PostgreSQL using BM25" version = { workspace = true } edition = { workspace = true } license = { workspace = true } [lints] workspace = true [lib] crate-type = ["cdylib"] [features] default = ["pg18", "deferred_wal"] pg15 = ["pgrx/pg15", "pgrx-tests/pg15"] pg16 = ["pgrx/pg16", "pgrx-tests/pg16"] pg17 = ["pgrx/pg17", "pgrx-tests/pg17"] pg18 = ["pgrx/pg18", "pgrx-tests/pg18"] pg_test = ["dep:proptest"] deferred_wal = [] # direct dep so the coverage shim survives into the cdylib (see lib.rs) dst = ["dst/enabled", "dep:antithesis-instrumentation"] unsafe-postgres = ["pgrx/unsafe-postgres"] block_tracker = [] # for debugging when blocks are acquired and released debug-logging = [ "dep:env_logger", ] # enables env_logger for dependency debug output [dependencies] async-trait = "0.1.89" dst = { path = "../dst" } antithesis-instrumentation = { version = "0.1", optional = true } # coverage shim; see lib.rs stable_deref_trait = "1.2.1" anyhow = { version = "1.0.102", features = ["backtrace"] } arrow-array = "59.1.0" arrow-buffer = "59.1.0" arrow-schema = "59.1.0" arrow-select = "59.1.0" bitpacking = "0.9.3" chrono = "0.4.45" time = "0.3.47" env_logger = { version = "0.11.10", optional = true } log = "0.4" once_cell = "1.21.4" parking_lot = "0.12.5" tokenizers = { path = "../tokenizers" } pgrx.workspace = true rustix = { version = "1", features = ["fs"] } rustc-hash = "2.1.2" serde = "1.0.228" serde_json = { version = "1.0.149", features = [ "preserve_order", "float_roundtrip", ] } serde_cbor = "0.11.2" tantivy.workspace = true thiserror = "2.0.18" ordered-float = "5.3.0" uuid = "1.23.1" strum = { version = "0.27.2" } serde_path_to_error = "0.1.20" bincode = { version = "2.0.1", features = [ "serde", "std", ], default-features = false } rand = "0.9.4" proptest = { version = "1.11.0", optional = true } postcard = { version = "1.1.3", features = [ "use-std", ], default-features = false } # same version as tantivy uses regex = { version = "1.12.3", default-features = false, features = [ "std", "perf", "unicode", ] } tantivy-fst = { git = "https://github.com/paradedb/fst.git" } lazy_static = "1.5.0" macros = { path = "../macros" } half = "2.7.1" bytemuck = { version = "1.25.0", features = ["derive", "min_const_generics"] } decimal-bytes = "0.4.2" paste = "1.0.15" typetag = "0.2" tokio = { version = "1", features = ["rt"] } bytes = { version = "1", features = ["serde"] } # Here and the equivalent in our datafusion-distributed fork will need to be updated in sync so that # both point to the same datafusion ref. datafusion = { git = "https://github.com/apache/datafusion", rev = "8d680db14a9134837bbd3d53497dd58c985c51a7", default-features = false } datafusion-proto = { git = "https://github.com/apache/datafusion", rev = "8d680db14a9134837bbd3d53497dd58c985c51a7", default-features = false } datafusion-distributed = { git = "https://github.com/paradedb/datafusion-distributed", tag = "snapshot-main-2026-07-27-225116", default-features = false } futures = "0.3" async-stream = "0.3.6" prost = "0.14.3" # SuperKMeans IVF clusterer (pure-Rust port). BLAS backend is target-specific: # Accelerate on macOS, OpenBLAS on Linux (already required by the build env). [target.'cfg(target_os = "macos")'.dependencies] superkmeans = { git = "https://github.com/paradedb/superkmeans-rs", package = "superkmeans-rs", rev = "9cebcb426cc5236eaec4ce035001e1299bbd9cf2", features = [ "accelerate", ] } [target.'cfg(not(target_os = "macos"))'.dependencies] superkmeans = { git = "https://github.com/paradedb/superkmeans-rs", package = "superkmeans-rs", rev = "9cebcb426cc5236eaec4ce035001e1299bbd9cf2", features = [ "openblas", ] } [dev-dependencies] pgrx-tests.workspace = true rstest = "0.25.0" proptest = "1.11.0" [package.metadata.cargo-machete] ignored = ["indexmap", "tantivy-common"]