I've noticed a MATCH SIMPLE and MATCH FULL, but I don't understand what they do. I see default is MATCH SIMPLE; but, how do the other MATCH clauses to the FOREIGN KEY constraint function?
Check the CREATE TABLE page of the manual:


  There are three match types: MATCH FULL, MATCH PARTIAL, and MATCH SIMPLE
  (which is the default). MATCH FULL will not allow one column of
  a multicolumn foreign key to be null unless all foreign key columns
  are null; if they are all null, the row is not required to have a
  match in the referenced table. MATCH SIMPLE allows any of the foreign
  key columns to be null; if any of them are null, the row is not
  required to have a match in the referenced table. MATCH PARTIAL is not
  yet implemented. (Of course, NOT NULL constraints can be applied to
  the referencing column(s) to prevent these cases from arising.)


Also, in the chapter on Foreign Keys:


  Normally, a referencing row need not satisfy the foreign key
  constraint if any of its referencing columns are null. If MATCH FULL
  is added to the foreign key declaration, a referencing row escapes
  satisfying the constraint only if all its referencing columns are null
  (so a mix of null and non-null values is guaranteed to fail a MATCH FULL
  constraint). If you don't want referencing rows to be able to
  avoid satisfying the foreign key constraint, declare the referencing
  column(s) as NOT NULL.


And be sure to consult the current manual or the version matching your installation. Don't fall for outdated Google links to outdated versions.
