Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,18 @@ jobs:
- runner: macos-latest
os: macos-latest
arch: arm64
deployment-target: '11.0'
extensions: pgvector pgvectorscale pgtextsearch pg_duckdb
deployment-target: '26.0'
extensions: pgvector pgvectorscale pgtextsearch pg_duckdb pgsql_http
- runner: ubuntu-latest
os: ubuntu-latest
arch: x86_64
deployment-target: ''
extensions: pgvector pgvectorscale pgtextsearch pg_duckdb
extensions: pgvector pgvectorscale pgtextsearch pg_duckdb pgsql_http
- runner: ubuntu-24.04-arm
os: ubuntu-latest
arch: aarch64
deployment-target: ''
extensions: pgvector pgvectorscale pgtextsearch pg_duckdb
extensions: pgvector pgvectorscale pgtextsearch pg_duckdb pgsql_http
- runner: windows-2022
os: windows-2022
arch: AMD64
Expand Down Expand Up @@ -88,8 +88,8 @@ jobs:
- name: Install Rust
if: matrix.os != 'ubuntu-latest'
run: |
rustup install 1.88.0
rustup default 1.88.0
rustup install 1.89.0
rustup default 1.89.0
- name: Install ccache
if: matrix.os != 'ubuntu-latest'
shell: bash
Expand Down Expand Up @@ -168,9 +168,9 @@ jobs:
apt-get install -y ccache jq gcc libssl-dev llvm-dev clang-dev pkg-config
apt-get install -y cmake ninja-build liblz4-dev libcurl4-openssl-dev libglib2.0-dev
fi
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.88.0
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.89.0
export PATH="$HOME/.cargo/bin:/usr/lib/ccache:$PATH"
rustup default 1.88.0
rustup default 1.89.0
cargo install cargo-pgrx --version 0.16.1 --locked
if command -v ldd &> /dev/null && ldd --version 2>&1 | grep -qi musl; then
export IS_MUSL=1
Expand All @@ -189,7 +189,7 @@ jobs:
CIBW_ENVIRONMENT_LINUX: PATH="$HOME/.cargo/bin:$PATH:/project/src/pgembed/pginstall/bin"
CIBW_ENVIRONMENT_MUSLLINUX: LIBCLANG_STATIC_PATH=/usr/lib
CIBW_ENVIRONMENT_MANYLINUX: LIBCLANG_PATH=/usr/lib64
CIBW_ENVIRONMENT_MACOS: PATH="$PWD/src/pgembed/pginstall/bin:$HOME/.cargo/bin:/opt/homebrew/opt/ccache/bin:$PATH" LDFLAGS="-L/opt/homebrew/lib -lssl -lcrypto" MACOSX_DEPLOYMENT_TARGET=15.0 BINDGEN_EXTRA_CLANG_ARGS="$(pg_config --cppflags) -I$(xcrun --show-sdk-path)/usr/include -I/opt/homebrew/include"
CIBW_ENVIRONMENT_MACOS: PATH="$PWD/src/pgembed/pginstall/bin:$HOME/.cargo/bin:/opt/homebrew/opt/ccache/bin:$PATH" LDFLAGS="-L/opt/homebrew/lib -lssl -lcrypto" MACOSX_DEPLOYMENT_TARGET=26.0 BINDGEN_EXTRA_CLANG_ARGS="$(pg_config --cppflags) -I$(xcrun --show-sdk-path)/usr/include -I/opt/homebrew/include"
CIBW_TEST_COMMAND_WINDOWS: true # Tests disabled pending issues with executing binaries built
CIBW_ENVIRONMENT_WINDOWS: PATH="$PWD\\src\\pgembed\\pginstall\\bin;$USERPROFILE\\.cargo\\bin;C:\\ProgramData\\chocolatey\\lib\\ccache\\tools\\ccache-AMD64-windows;$PATH" LIBCLANG_PATH="C:\\Program Files\\LLVM\\bin"
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deployment-target }}
Expand Down
25 changes: 22 additions & 3 deletions pgbuild/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ else
endif

ifeq ($(RUST_EXTENSIONS_SUPPORTED),1)
EXTENSIONS ?= pgvector pgvectorscale pgtextsearch
EXTENSIONS ?= pgvector pgvectorscale pgtextsearch
else
EXTENSIONS ?= pgvector
EXTENSIONS ?= pgvector pgsql_http
endif
ifneq ($(OS),Windows_NT)
EXTENSIONS ?= $(EXTENSIONS) pg_duckdb
Expand All @@ -41,12 +41,13 @@ EXTENSIONS := $(filter-out $(UNSUPPORTED_EXTENSIONS),$(REQUESTED_EXTENSIONS))
.PHONY: all
all: postgres $(EXTENSIONS)

.PHONY: pgvector pgvectorscale pgtextsearch pg_search pg_duckdb
.PHONY: pgvector pgvectorscale pgtextsearch pg_search pg_duckdb pgsql_http
pgvector: postgres $(INSTALL_PREFIX)/lib/vector.so
pgvectorscale: postgres $(INSTALL_PREFIX)/lib/vectorscale.so
pgtextsearch: postgres $(INSTALL_PREFIX)/lib/pg_textsearch.so
pg_search: postgres $(INSTALL_PREFIX)/lib/pg_search.so
pg_duckdb: postgres $(INSTALL_PREFIX)/lib/pg_duckdb.so
pgsql_http: postgres $(INSTALL_PREFIX)/lib/http.so

### postgres
POSTGRES_VERSION := 17-stable
Expand Down Expand Up @@ -97,6 +98,23 @@ $(INSTALL_PREFIX)/lib/vector.so: $(PGVECTOR_DIR)/Makefile $(INSTALL_PREFIX)/bin/
&& $(MAKE) -C $(PGVECTOR_DIR) PG_CONFIG=$(INSTALL_PREFIX)/bin/pg_config$(EXE_EXT) -j \
&& $(MAKE) -C $(PGVECTOR_DIR) PG_CONFIG=$(INSTALL_PREFIX)/bin/pg_config$(EXE_EXT) install

### pgsql_http
PGSQL_HTTP_TAG := v1.7.2
PGSQL_HTTP_URL := https://github.com/pramsey/pgsql-http/archive/refs/tags/$(PGSQL_HTTP_TAG).tar.gz
PGSQL_HTTP_DIR := pgsql-http-$(PGSQL_HTTP_TAG)

$(PGSQL_HTTP_DIR).tar.gz:
curl -L -o $(PGSQL_HTTP_DIR).tar.gz $(PGSQL_HTTP_URL)

$(PGSQL_HTTP_DIR)/Makefile: $(PGSQL_HTTP_DIR).tar.gz
mkdir -p $(PGSQL_HTTP_DIR)
tar xzf $(PGSQL_HTTP_DIR).tar.gz -C $(PGSQL_HTTP_DIR) --strip-components=1
touch $(PGSQL_HTTP_DIR)/Makefile

$(INSTALL_PREFIX)/lib/http.so: $(PGSQL_HTTP_DIR)/Makefile $(INSTALL_PREFIX)/bin/postgres
unset MAKELEVEL && unset MAKEFLAGS && unset MFLAGS \
&& $(MAKE) -C $(PGSQL_HTTP_DIR) PG_CONFIG=$(INSTALL_PREFIX)/bin/pg_config$(EXE_EXT) -j \
&& $(MAKE) -C $(PGSQL_HTTP_DIR) PG_CONFIG=$(INSTALL_PREFIX)/bin/pg_config$(EXE_EXT) install
### pg_duckdb
PG_DUCKDB_TAG := v1.1.1
PG_DUCKDB_REPO := https://github.com/duckdb/pg_duckdb
Expand Down Expand Up @@ -203,6 +221,7 @@ clean:
rm -rf $(PG_DUCKDB_DIR)
rm -rf $(PGTEXTSEARCH_DIR)
rm -rf $(PGSEARCH_DIR)
rm -rf $(PGSQL_HTTP_DIR)

clean-all: clean
rm -rf *.tar.gz
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
[project]
name = "pgembed" # Required
version = "0.2.0" # Required
version = "0.2.1" # Required
description = "Self-contained postgres server for your python applications" # Required
readme = "README.md" # Optional
requires-python = ">=3.12"
license = {file = "LICENSE.txt"}
urls={repository="https://github.com/Ladybug-Memory/pgembed"}
authors=[{ name="Oscar Moll", email="orm@csail.mit.edu" }, { name="Arun Sharma", email="arun@sharma-home.net" }]
keywords=["postgresql", "pgvector", "pg_duckdb", "pgembed", "pg_textsearch", "rag"]
keywords=["postgresql", "pgvector", "pg_duckdb", "pgembed", "pg_textsearch", "rag", "pgsl-http"]
dependencies = [
"fasteners>=0.19",
"platformdirs>=4.0.0",
Expand All @@ -21,7 +21,7 @@ dev = [
test = [
"pytest",
"psycopg2-binary",
"sqlalchemy>=2",
"sqlalchemy>=2,<2.1",
"sqlalchemy-utils"
]

Expand Down
4 changes: 4 additions & 0 deletions src/pgembed/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ def _get_pkg_path():
"pgvector": "pgembed_pgvector",
"pgvectorscale": "pgembed_pgvectorscale",
"pgtextsearch": "pgembed_pgtextsearch",
"pgsql_http": "pgembed_pgsql_http"
}

EXTENSION_SO_FILES = {
Expand All @@ -32,6 +33,7 @@ def _get_pkg_path():
"pgtextsearch": "pg_textsearch.so",
"pg_search": "pg_search.so",
"pg_duckdb": "pg_duckdb.so",
"pgsql_http": "http.so",
}

EXTENSION_NAMES = (
Expand All @@ -40,6 +42,7 @@ def _get_pkg_path():
"pgtextsearch",
"pg_search",
"pg_duckdb",
"pgsql_http"
)


Expand Down Expand Up @@ -106,6 +109,7 @@ def get_extension_create_name(name: str) -> str:
"pgtextsearch": "pg_textsearch",
"pg_search": "pg_search",
"pg_duckdb": "pg_duckdb",
"pgsql_http": "http"
}
return create_names.get(name, name)

Expand Down
50 changes: 50 additions & 0 deletions src/pgembed_pgsql_http/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
__version__ = "0.1.8"

EXTENSION_NAME = "pgsql_http"
EXTENSION_SO = "http.so"
EXTENSION_CREATE = "http"


def get_extension_path():
from pathlib import Path

pkg_dir = Path(__file__).parent
so_path = pkg_dir / EXTENSION_SO
if so_path.exists():
return so_path

try:
import pgembed

base_lib = pgembed.EXTENSION_LIB_PATH
bundled = base_lib / "postgresql" / EXTENSION_SO
if bundled.exists():
return bundled
except ImportError:
pass

return None


def get_extension_share_path():
from pathlib import Path

try:
import pgembed

base_share = (
Path(__file__).parent / "pginstall" / "share" / "postgresql" / "extension"
)
control_file = base_share / f"{EXTENSION_NAME}.control"
if control_file.exists():
return base_share

base_share = (
pgembed.EXTENSION_LIB_PATH.parent / "share" / "postgresql" / "extension"
)
control_file = base_share / f"{EXTENSION_NAME}.control"
if control_file.exists():
return base_share
except ImportError:
pass
return None
17 changes: 17 additions & 0 deletions src/pgembed_pgsql_http/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[project]
name = "pgembed-http"
version = "0.1.8"
description = "pgsql-http extension for pgembed"
readme = "README.md"
requires-python = ">=3.12"
dependencies = ["pgembed>=0.1.8"]

[project.optional-dependencies]
test = ["pytest"]

[tool.setuptools.packages.find]
where = ["src"]

[build-system]
requires = ["setuptools>=58.0.0", "wheel"]
build-backend = "setuptools.build_meta"