sudo apt-get install build-essential libreadline-dev zlib1g-dev flex bison \
libxml2-dev libxslt-dev libssl-dev libxml2-utils xsltproc ccache docbook \
docbook-dsssl docbook-xsl docbook-xml docbook-defguide openjade \
libxml2-utils sgml-data
Follow the official platform-specific notes:
xcode-select --install./configure \
--enable-depend \
--enable-cassert \
--enable-debug \
--prefix=/tmp/pg18_featureXXX \
--with-openssl
Important: Always use --prefix with a descriptive path in /tmp (e.g., /tmp/pg18_featureXXX where XXX describes your feature) to avoid conflicts with system PostgreSQL installations and easily identify different builds.
make -j8
./configure --enable-depend --enable-cassert --enable-debug --prefix=/tmp/pg18_featureXXX
make -j8
make install
psql --no-psqlrc -d postgres
This prevents loading of the user's .psqlrc file, ensuring consistent behavior across different environments.
Follow PostgreSQL's commit message style - comprehensive and detailed:
Short descriptive title (50 chars max)
Detailed explanation of what this change does and why it's needed.
Be precise, concise, and brief while explaining all important details.
Changes made:
- Specific change 1 with technical details
- Specific change 2 with rationale
- Specific change 3 with impact description
Testing performed:
- Test scenario 1
- Test scenario 2
No emojis in commit messages.
.cursor/, CLAUDE.md, .cursorrules, etc.)Important: When creating .patch or .diff files, ensure AI tooling files are excluded. Use git diff with pathspec exclusions:
# Exclude AI tooling files from patches
git diff -- . ':(exclude).cursor' ':(exclude)CLAUDE.md' ':(exclude).cursorrules'
/tmp instead of the repo directory.gitignoremake checkmake check TESTS="test_name"make clean && make -j8./configure --enable-debuggdb for debugging: gdb --args postgres -D /path/to/datapg_log/ directorypgindent for consistent formatting