You can actually create a primary key directly on a geometry column. It had never actually occurred to me to do this, and it seems unnatural compared to either an arbitrary number, ie, a serial data type, or some meaningful attribute or unique combination of attributes of the geometry's properties. As you will almost certainly want a spatial index also, you will end up with two different types of index on the same column, which is wasteful of space, as a serial data type is smaller than a geometry, and guaranteed to be unique.
It is also perfectly reasonable to have the same geometry, but with different attributes, eg, point samples over time. You would be unable to support this with a spatial column as a primary key.
Here is a small example, using a random number generator to create a million points, and the DISTINCT keyword to ensure they are unique (which is extremely likely, but not certain).
CREATE TABLE spatial_primary (geom geometry);
INSERT INTO spatial_primary (geom)
(SELECT DISTINCT ST_Makepoint(random(), random())
FROM generate_series(1, 1000000));
Create both a primary key on the geometry column and a spatial index.
ALTER TABLE spatial_primary ADD PRIMARY KEY (geom);
CREATE INDEX ix_spatial_primary ON spatial_primary USING GIST (geom);
Now, attempt to insert a duplicate:
INSERT INTO spatial_primary SELECT geom FROM spatial_primary LIMIT 1;
ERROR: duplicate key value violates unique constraint "spatial_primary_pkey"
DETAIL: Key (geom)=(0101000000000000C9FA9BEB3F0000008BB9F1D63F) already exists.
So, while it is unusual and probably not best practice, nothing prevents you from creating a primary key on a geometry, so long as the geometries are unique. However, it is almost certainly better to use some other unique value, whether serial, UUID (as MappaGnosis suggests) or some attribute(s) of the geometry.