There can only be one PRIMARY KEY constraint per table (spanning one or more columns) - as indicated by the word "primary".
You can have additional UNIQUE constraints (spanning one or more columns).
Short syntax with "column constraints":
CREATE TABLE test(
sl_no int PRIMARY KEY -- NOT NULL due to PK
, emp_id int UNIQUE NOT NULL
, ...
);
Columns that are (part of) the PRIMARY KEY are marked NOT NULL automatically. Some like to add a NOT NULL constraint explicitly. Redundant, but doesn't hurt.
UNIQUE constraints allow null values - unless the column is marked NOT NULL explicitly. See:
The same can be achieved with "table constraints" - the only syntax option to involve multiple columns. Like a multicolumn PRIMARY KEY. Now, only the combination of columns must be unique, each column can hold duplicates on its own. Minimal syntax:
CREATE TABLE test (
sl_no int -- NOT NULL due to PK below
, emp_id int -- NOT NULL due to PK below
, ...
, PRIMARY KEY (sl_no, emp_id)
);
Or full syntax with custom constraint name:
...
, CONSTRAINT test_pkey PRIMARY KEY (sl_no, emp_id)
...
"test_pkey" also happens to be the default PK name for a table named "test".
There are a number of optional additional modifiers. Read the manual.
Aside: Use legal, lower-case identifiers in Postgres, so you never have to double-quote. See: