Definitions of the Postgres terminology we use in our errors and messaging
A column or group of columns that can be used to uniquely identify a row in a table. This requires that the values be both unique and not empty.
A column that matches the value appearing in a column of another table and maintains the referential integrity between two related tables.
Whalesync requires that your primary key has a default value generated via a function. This guarantees that there will be a value even if you don't map the primary key column.
Whalesync requires that every table you map has a single primary key and that it is generated because it is essential that we can uniquely identify a row of data every time in order to be able to sync it correctly to or from another application. The primary key guarantees uniqueness and the generation means there will always be a good, viable value.
See Postgres snippets for helpful generation functions as well as defining the primary and foreign keys of a table.