Chapter 50. PostgreSQL Coding Conventions

Table of Contents
50.1. Formatting
50.2. Reporting Errors Within the Server
50.3. Error Message Style Guide
50.3.1. What goes where
50.3.2. Formatting
50.3.3. Quotation marks
50.3.4. Use of quotes
50.3.5. Grammar and punctuation
50.3.6. Upper case vs. lower case
50.3.7. Avoid passive voice
50.3.8. Present vs past tense
50.3.9. Type of the object
50.3.10. Brackets
50.3.11. Assembling error messages
50.3.12. Reasons for errors
50.3.13. Function names
50.3.14. Tricky words to avoid
50.3.15. Proper spelling
50.3.16. Localization

50.1. Formatting

Source code formatting uses 4 column tab spacing, with tabs preserved (i.e. tabs are not expanded to spaces). Each logical indentation level is one additional tab stop. Layout rules (brace positioning, etc) follow BSD conventions.

While submitted patches do not absolutely have to follow these formatting rules, it's a good idea to do so. Your code will get run through pgindent, so there's no point in making it look nice under some other set of formatting conventions.

For Emacs, add the following (or something similar) to your ~/.emacs initialization file:

;; check for files with a path containing "postgres" or "pgsql"
(setq auto-mode-alist
  (cons '("\\(postgres\\|pgsql\\).*\\.[ch]\\'" . pgsql-c-mode)
        auto-mode-alist))
(setq auto-mode-alist
  (cons '("\\(postgres\\|pgsql\\).*\\.cc\\'" . pgsql-c-mode)
        auto-mode-alist))

(defun pgsql-c-mode ()
  ;; sets up formatting for PostgreSQL C code
  (interactive)
  (c-mode)
  (setq-default tab-width 4)
  (c-set-style "bsd")             ; set c-basic-offset to 4, plus other stuff
  (c-set-offset 'case-label '+)   ; tweak case indent to match PG custom
  (setq indent-tabs-mode t))      ; make sure we keep tabs when indenting

For vi, your ~/.vimrc or equivalent file should contain the following:

set tabstop=4

or equivalently from within vi, try

:set ts=4

The text browsing tools more and less can be invoked as

more -x4
less -x4

to make them show tabs appropriately.