path: root/
diff options
authordefanor <>2018-12-30 13:05:36 +0300
committerdefanor <>2018-12-30 13:05:36 +0300
commit1b3ea5d48e049c595f90eb8b9fb11f8149927519 (patch)
tree979b85238d5f40f05284993c40b98428ca63a8a8 /
Initial commit
The initial working version, an example, and brief description are included. Error handling and reporting, perhaps HTTP headers, CLI arguments, and documentation can still be improved, but that's for future commits.
Diffstat (limited to '')
1 files changed, 81 insertions, 0 deletions
diff --git a/ b/
new file mode 100644
index 0000000..7770552
--- /dev/null
+++ b/
@@ -0,0 +1,81 @@
+# pg×html
+This is a tool to make custom web interfaces to PostgreSQL databases,
+using simple and standard technologies:
+- SQL for querying
+- XSLT for templating (translation of XML query results into XHTML)
+- HTML forms for user input
+- Optional HTTP basic authentication for PostgreSQL authentication
+URL query parameters are available for use from XSLTs. SQL query
+templates also can use those, as well as HTML form data submitted with
+the POST method.
+Request timeouts are enforced and do cancel DB queries, but otherwise
+it relies on PostgreSQL for access permissions and security policies,
+as well as for any business logic that may be needed.
+It is based on WAI, and can be used with CGI, socket activation, Unix
+domain sockets, or as a standalone HTTP server.
+## Usage
+### Invocation
+See [wai-cli]( for CLI
+arguments. The used environment variables are:
+- `TIMEOUT`: request timeout in seconds, 10 by default.
+- `XSLT_DIR`: a directory to read XSLT files from, current working
+ directory by default.
+Regular [libpq environment
+are used for database connections.
+### Templating
+URL query parameters are made visible to XSLTs as `xsl:param`
+parameters. The documents they get applied to are either the results
+of SQL queries (which are expected to return a single XML document,
+using `query_to_xml` or similar functions), or error documents (which
+contain error details) in case of an SQL error.
+The XSLTs are taken from `XSLT_DIR`, using file name from the URL
+query, with its extension changed to `xsl`.
+### Querying
+SQL queries provided in the `q` URL query parameter get executed, with
+some substitutions to handle HTML forms:
+- `f:<name>` for POST parameters
+- `q:<name>` for GET parameters
+- `:fields` for POST parameter names
+- `:values` for POST parameter values (in the same order as the names)
+`:fields` and `:values` are unnecessary, but are provided for
+convenience of insert/upsert operations.
+SQL queries get tokenized by splitting into words and reassembled
+afterwards, hence some whitespace separation is needed.
+### Authentication
+Presence of `authorised` in the URL path requires HTTP basic
+authentication, and the provided credentials are used directly for
+PostgreSQL authentication.
+### Web server
+This is intended to be used with an HTTP server, which would take care
+of encryption, compression, static files, redirects, and so on, while
+pgxhtml only focuses on providing a web interface to a database.
+## See also
+[PostgREST](, "a standalone web server that
+turns your PostgreSQL database directly into a RESTful API".