diff --git a/.github/workflows/postgresql-16-pgdg-package-pgxs.yml b/.github/workflows/postgresql-16-pgdg-package-pgxs.yml new file mode 100644 index 00000000..77a3812f --- /dev/null +++ b/.github/workflows/postgresql-16-pgdg-package-pgxs.yml @@ -0,0 +1,50 @@ +name: postgresql-16-pgdg-package-pgxs +on: [pull_request, workflow_dispatch] + +jobs: + build: + name: pg-16-pgdg-package-pgxs-build + runs-on: ubuntu-22.04 + steps: + - name: Remove old postgres + run: | + sudo apt-get update + sudo apt purge postgresql-client-common postgresql-common \ + postgresql postgresql* + sudo rm -rf /var/lib/postgresql /var/log/postgresql /etc/postgresql \ + /usr/lib/postgresql /usr/include/postgresql /usr/share/postgresql \ + /etc/postgresql + sudo rm -f /usr/bin/pg_config + + - name: Install dependencies + run: | + sudo apt-get install -y libreadline6-dev systemtap-sdt-dev wget \ + zlib1g-dev libssl-dev libpam0g-dev bison flex libipc-run-perl + sudo /usr/bin/perl -MCPAN -e 'install IPC::RUN' + sudo /usr/bin/perl -MCPAN -e 'install Text::Trim' + + - name: Install PG Distribution Postgresql 16 + run: | + sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt \ + $(lsb_release -cs)-pgdg main 16" > /etc/apt/sources.list.d/pgdg.list' + sudo wget --quiet -O - \ + https://www.postgresql.org/media/keys/ACCC4CF8.asc | + sudo apt-key add - + sudo apt update + sudo apt -y install postgresql-16 postgresql-server-dev-16 + + - name: Clone postgres-tde-ext repository + uses: actions/checkout@master + with: + path: 'src/postgres-tde-ext' + + - name: Change src owner to postgres + run: | + sudo chmod o+rx ~ + sudo chown -R postgres:postgres src + + - name: Build postgres-tde-ext + run: | + sudo -u postgres bash -c 'make USE_PGXS=1' + sudo make USE_PGXS=1 install + working-directory: src/postgres-tde-ext diff --git a/.github/workflows/postgresql-16-src-make.yml b/.github/workflows/postgresql-16-src-make.yml new file mode 100644 index 00000000..773839ce --- /dev/null +++ b/.github/workflows/postgresql-16-src-make.yml @@ -0,0 +1,57 @@ +name: postgresql-16-src-make +on: [pull_request, workflow_dispatch] + +jobs: + build: + name: pg-16-src-make-test + runs-on: ubuntu-22.04 + steps: + + + - name: Remove old postgres + run: | + sudo apt purge postgresql-client-common postgresql-common \ + postgresql postgresql* + sudo rm -rf /var/lib/postgresql /var/log/postgresql /etc/postgresql \ + /usr/lib/postgresql /usr/include/postgresql /usr/share/postgresql \ + /etc/postgresql + sudo rm -f /usr/bin/pg_config + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y libreadline6-dev systemtap-sdt-dev \ + zlib1g-dev libssl-dev libpam0g-dev bison flex \ + libipc-run-perl -y docbook-xsl docbook-xsl libxml2 libxml2-utils \ + libxml2-dev libxslt-dev xsltproc libkrb5-dev libldap2-dev \ + libsystemd-dev gettext tcl-dev libperl-dev pkg-config clang-11 \ + llvm-11 llvm-11-dev libselinux1-dev python3-dev \ + uuid-dev liblz4-dev + sudo /usr/bin/perl -MCPAN -e 'install IPC::RUN' + sudo /usr/bin/perl -MCPAN -e 'install Text::Trim' + + - name: Clone postgres repository + uses: actions/checkout@v2 + with: + repository: 'postgres/postgres' + ref: 'REL_16_STABLE' + path: 'src' + + - name: Clone postgres-tde-ext repository + uses: actions/checkout@v2 + with: + path: 'src/contrib/postgres-tde-ext' + + - name: Create pgsql dir + run: mkdir -p /opt/pgsql + + - name: Build postgres + run: | + ./configure --prefix=/usr --with-openssl + make -j + working-directory: src + + - name: Build postgres-tde-ext + run: | + make -j + working-directory: src/contrib/postgres-tde-ext diff --git a/.github/workflows/postgresql-16-src-meson.yml b/.github/workflows/postgresql-16-src-meson.yml new file mode 100644 index 00000000..777d09e8 --- /dev/null +++ b/.github/workflows/postgresql-16-src-meson.yml @@ -0,0 +1,53 @@ +name: postgresql-16-src-meson +on: [pull_request, workflow_dispatch] + +jobs: + build: + name: pg-16-src-meson-test + runs-on: ubuntu-22.04 + steps: + + + - name: Remove old postgres + run: | + sudo apt purge postgresql-client-common postgresql-common \ + postgresql postgresql* + sudo rm -rf /var/lib/postgresql /var/log/postgresql /etc/postgresql \ + /usr/lib/postgresql /usr/include/postgresql /usr/share/postgresql \ + /etc/postgresql + sudo rm -f /usr/bin/pg_config + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y libreadline6-dev systemtap-sdt-dev \ + zlib1g-dev libssl-dev libpam0g-dev bison flex \ + libipc-run-perl -y docbook-xsl docbook-xsl libxml2 libxml2-utils \ + libxml2-dev libxslt-dev xsltproc libkrb5-dev libldap2-dev \ + libsystemd-dev gettext tcl-dev libperl-dev pkg-config clang-11 \ + llvm-11 llvm-11-dev libselinux1-dev python3-dev \ + uuid-dev liblz4-dev meson ninja-build + sudo /usr/bin/perl -MCPAN -e 'install IPC::RUN' + sudo /usr/bin/perl -MCPAN -e 'install Text::Trim' + + - name: Clone postgres repository + uses: actions/checkout@v2 + with: + repository: 'postgres/postgres' + ref: 'REL_16_STABLE' + path: 'src' + + - name: Clone postgres-tde-ext repository + uses: actions/checkout@v2 + with: + path: 'src/contrib/postgres-tde-ext' + + - name: Include postgres-tde-ext in meson build + run: | + echo "subdir('postgres-tde-ext')" >> src/contrib/meson.build + + - name: Build postgres + run: | + meson setup build + cd build && ninja + working-directory: src diff --git a/src/access/pg_tde_io.c b/src/access/pg_tde_io.c index b62dad71..5be12926 100644 --- a/src/access/pg_tde_io.c +++ b/src/access/pg_tde_io.c @@ -325,7 +325,7 @@ RelationAddBlocks(Relation relation, BulkInsertState bistate, * [auto]vacuum trying to truncate later pages as REL_TRUNCATE_MINIMUM is * way larger. */ - first_block = ExtendBufferedRelBy(EB_REL(relation), MAIN_FORKNUM, + first_block = ExtendBufferedRelBy(BMR_REL(relation), MAIN_FORKNUM, bistate ? bistate->strategy : NULL, EB_LOCK_FIRST, extend_by_pages, diff --git a/src/access/pg_tde_visibilitymap.c b/src/access/pg_tde_visibilitymap.c index 390c7d60..4d25e633 100644 --- a/src/access/pg_tde_visibilitymap.c +++ b/src/access/pg_tde_visibilitymap.c @@ -631,7 +631,7 @@ vm_extend(Relation rel, BlockNumber vm_nblocks) { Buffer buf; - buf = ExtendBufferedRelTo(EB_REL(rel), VISIBILITYMAP_FORKNUM, NULL, + buf = ExtendBufferedRelTo(BMR_REL(rel), VISIBILITYMAP_FORKNUM, NULL, EB_CREATE_FORK_IF_NEEDED | EB_CLEAR_SIZE_CACHE, vm_nblocks, diff --git a/src/encryption/enc_tuple.c b/src/encryption/enc_tuple.c index ae45f676..d13c06a7 100644 --- a/src/encryption/enc_tuple.c +++ b/src/encryption/enc_tuple.c @@ -2,6 +2,7 @@ #define ENCRYPTION_DEBUG 1 #include "postgres.h" +#include "utils/memutils.h" #include "encryption/enc_tuple.h" #include "encryption/enc_aes.h" @@ -76,11 +77,14 @@ static void PGTdeDecryptTupInternal2(BlockNumber bn, Page page, HeapTuple tuple, { char* newPtr = (char*)tuple->t_data; - // Most of the time we can't decrypt in place, so we allocate some memory... and leek it for now :( if(allocNew) { - newPtr = malloc(tuple->t_len); + MemoryContext oldctx = MemoryContextSwitchTo(CurTransactionContext); + + newPtr = palloc(tuple->t_len); memcpy(newPtr, tuple->t_data, tuple->t_len); + + MemoryContextSwitchTo(oldctx); } PGTdeDecryptTupInternal(tuple->t_tableOid, bn, page, tuple->t_data, newPtr, from, to);