From da6686e823d7a149d9dfb063a46b14ed48a5506c Mon Sep 17 00:00:00 2001 From: Usamoi Date: Tue, 16 Jan 2024 15:34:10 +0800 Subject: [PATCH] chore: set schema and search_path (#273) * chore: set schema and search_path Signed-off-by: usamoi * fix: remove unnecessary changes Signed-off-by: usamoi * fix: set search_path for docker Signed-off-by: usamoi * fix: ci Signed-off-by: usamoi * fix: docker Signed-off-by: usamoi * fix: search_path search order Signed-off-by: usamoi --------- Signed-off-by: usamoi --- Cargo.toml | 2 +- docker/pgvecto-rs.Dockerfile | 2 +- scripts/ci_install.sh | 1 + src/bin/pgrx_embed.rs | 12 ++++++++++++ src/datatype/vecf16.rs | 2 +- src/datatype/vecf32.rs | 2 +- src/index/am_setup.rs | 16 ++++++++-------- src/index/views.rs | 4 +++- vectors.control | 1 + 9 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 src/bin/pgrx_embed.rs diff --git a/Cargo.toml b/Cargo.toml index 0b90db548..d3eaf831b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ version.workspace = true edition.workspace = true [lib] -crate-type = ["cdylib"] +crate-type = ["cdylib", "lib"] [features] default = ["pg15"] diff --git a/docker/pgvecto-rs.Dockerfile b/docker/pgvecto-rs.Dockerfile index 32a82b9ad..d01f0061a 100644 --- a/docker/pgvecto-rs.Dockerfile +++ b/docker/pgvecto-rs.Dockerfile @@ -7,4 +7,4 @@ FROM tensorchord/pgvecto-rs-binary:${TAG}-${TARGETARCH} as binary FROM postgres:$POSTGRES_VERSION COPY --from=binary /pgvecto-rs-binary-release.deb /tmp/vectors.deb RUN apt-get install -y /tmp/vectors.deb && rm -f /tmp/vectors.deb -CMD ["postgres","-c","shared_preload_libraries=vectors.so"] +CMD ["postgres", "-c" ,"shared_preload_libraries='vectors.so'", "-c", "search_path='\"\$user\", public, vectors'"] diff --git a/scripts/ci_install.sh b/scripts/ci_install.sh index 27ab94e0e..9c0727798 100755 --- a/scripts/ci_install.sh +++ b/scripts/ci_install.sh @@ -3,6 +3,7 @@ set -e cargo pgrx install --no-default-features --features "pg$VERSION" --release psql -c 'ALTER SYSTEM SET shared_preload_libraries = "vectors.so"' +psql -c 'ALTER SYSTEM SET search_path TO "$user", public, vectors' if [ "$OS" == "ubuntu-latest" ]; then sudo systemctl restart postgresql diff --git a/src/bin/pgrx_embed.rs b/src/bin/pgrx_embed.rs new file mode 100644 index 000000000..901992218 --- /dev/null +++ b/src/bin/pgrx_embed.rs @@ -0,0 +1,12 @@ +macro_rules! pgrx_embed { + () => { + #[cfg(not(pgrx_embed))] + fn main() { + panic!("PGRX_EMBED was not set."); + } + #[cfg(pgrx_embed)] + include!(env!("PGRX_EMBED")); + }; +} + +pgrx_embed!(); diff --git a/src/datatype/vecf16.rs b/src/datatype/vecf16.rs index 557552cba..5277935eb 100644 --- a/src/datatype/vecf16.rs +++ b/src/datatype/vecf16.rs @@ -226,7 +226,7 @@ impl IntoDatum for Vecf16Output { } fn type_oid() -> Oid { - pgrx::wrappers::regtypein("vecf16") + pgrx::wrappers::regtypein("vectors.vecf16") } } diff --git a/src/datatype/vecf32.rs b/src/datatype/vecf32.rs index 9e0b50d05..29acbdc89 100644 --- a/src/datatype/vecf32.rs +++ b/src/datatype/vecf32.rs @@ -226,7 +226,7 @@ impl IntoDatum for Vecf32Output { } fn type_oid() -> Oid { - pgrx::wrappers::regtypein("vector") + pgrx::wrappers::regtypein("vectors.vector") } } diff --git a/src/index/am_setup.rs b/src/index/am_setup.rs index a7748c65b..239a83a16 100644 --- a/src/index/am_setup.rs +++ b/src/index/am_setup.rs @@ -21,7 +21,7 @@ pub unsafe fn convert_opclass_to_distance(opclass: pgrx::pg_sys::Oid) -> (Distan let tuple = pgrx::pg_sys::SearchSysCache1(opclass_cache_id, opclass.into()); assert!( !tuple.is_null(), - "cache lookup failed for operator class {opclass}" + "cache lookup failed for operator class {opclass:?}" ); let classform = pgrx::pg_sys::GETSTRUCT(tuple).cast::(); let opfamily = (*classform).opcfamily; @@ -36,7 +36,7 @@ pub unsafe fn convert_opfamily_to_distance(opfamily: pgrx::pg_sys::Oid) -> (Dist let tuple = pgrx::pg_sys::SearchSysCache1(opfamily_cache_id, opfamily.into()); assert!( !tuple.is_null(), - "cache lookup failed for operator family {opfamily}" + "cache lookup failed for operator family {opfamily:?}" ); let list = pgrx::pg_sys::SearchSysCacheList( opstrategy_cache_id, @@ -53,17 +53,17 @@ pub unsafe fn convert_opfamily_to_distance(opfamily: pgrx::pg_sys::Oid) -> (Dist assert!((*amop).amoppurpose == pgrx::pg_sys::AMOP_ORDER as libc::c_char); let operator = (*amop).amopopr; let result; - if operator == regoperatorin("<->(vector,vector)") { + if operator == regoperatorin("vectors.<->(vectors.vector,vectors.vector)") { result = (Distance::L2, Kind::F32); - } else if operator == regoperatorin("<#>(vector,vector)") { + } else if operator == regoperatorin("vectors.<#>(vectors.vector,vectors.vector)") { result = (Distance::Dot, Kind::F32); - } else if operator == regoperatorin("<=>(vector,vector)") { + } else if operator == regoperatorin("vectors.<=>(vectors.vector,vectors.vector)") { result = (Distance::Cos, Kind::F32); - } else if operator == regoperatorin("<->(vecf16,vecf16)") { + } else if operator == regoperatorin("vectors.<->(vectors.vecf16,vectors.vecf16)") { result = (Distance::L2, Kind::F16); - } else if operator == regoperatorin("<#>(vecf16,vecf16)") { + } else if operator == regoperatorin("vectors.<#>(vectors.vecf16,vectors.vecf16)") { result = (Distance::Dot, Kind::F16); - } else if operator == regoperatorin("<=>(vecf16,vecf16)") { + } else if operator == regoperatorin("vectors.<=>(vectors.vecf16,vectors.vecf16)") { result = (Distance::Cos, Kind::F16); } else { SessionError::BadOptions2.friendly(); diff --git a/src/index/views.rs b/src/index/views.rs index b534ab0a3..4944eabcc 100644 --- a/src/index/views.rs +++ b/src/index/views.rs @@ -2,7 +2,9 @@ use crate::prelude::*; use service::prelude::*; #[pgrx::pg_extern(volatile, strict)] -fn _vectors_index_stat(oid: pgrx::pg_sys::Oid) -> pgrx::composite_type!("vector_index_stat") { +fn _vectors_index_stat( + oid: pgrx::pg_sys::Oid, +) -> pgrx::composite_type!('static, "vector_index_stat") { use service::index::IndexStat; let id = Handle::from_sys(oid); let mut res = pgrx::prelude::PgHeapTuple::new_composite_type("vector_index_stat").unwrap(); diff --git a/vectors.control b/vectors.control index d48f1aef5..439526573 100644 --- a/vectors.control +++ b/vectors.control @@ -3,3 +3,4 @@ default_version = '@CARGO_VERSION@' module_pathname = '$libdir/vectors' relocatable = false superuser = true +schema = vectors