pgchess Quickstart

Notes

We require extensions pgchess and pg2podg.

The procedure described in this document has been tested on a PostgreSQL 9.2 server, where pgchess version 0.1.6 and pg2podg version 0.1.3 have been installed.

The SQL files in the test/sql/play directory make use of the convenient \ir meta command, which was introduced on PostgreSQL 9.2; on PostgreSQL 9.1 it is necessary to rewrite such files using the \i meta command. Future versions of this extension will include a 9.1 version of these files as well.

Step 1

Install both extensions on a PostgreSQL 9.1+ server. You can use pgxnclient, for instance:

pgxnclient install pgchess
pgxnclient install pg2podg

Step 2

Download and unpack the pgchess archive, which contains some additional files:

pgxnclient download pgchess
unzip pgchess-0.1.6.zip
cd pgchess-0.1.6/test/sql

Step 3

Create the database objects, in the following order:

gianni=# CREATE EXTENSION pgchess;
CREATE EXTENSION
gianni=# CREATE EXTENSION pg2podg;
CREATE EXTENSION

Step 4

Load a default game in the chessboard:

\i play/new-game.sql

Step 5

View the game in FEN notation

gianni=# select %% game from status;
                         ?column?                         
----------------------------------------------------------
 rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
(1 row)

Step 5a (optional)

If you are using a VT100-compatible terminal, you can use an enhanced graphical display.

First make sure that the background is lighter than the foreground (e.g. black on white); then issue

gianni=# \pset format unaligned
Output format is unaligned.

and check that it is working by displaying the current game:

gianni=# select # game from status;
?column?
 ♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜  8
 ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟  7
                  6
                  5
                  4
                  3
 ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙  2
 ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖  1
 a b c d e f g h  
(1 row)

Step 6

Now you can start a CPU v CPU game:

\i play/PG_v_PG.sql

you can interrupt the game with CTRL-C. Since each half-move is executed in a separate transaction, the game will be left in the state corresponding to the last completed move.