I'm not able to reproduce this in QGIS 2.2 Windows, c3a2817.
If other versions behave differently, or if you're continuing to have this problem, you can probably set up a PostgreSQL trigger on the table as a workaround:
Using this example table:
CREATE TABLE testing (gid serial PRIMARY KEY, geom geometry(Polygon, 4326));
Here's a trigger function that will assign a new gid
where needed:
CREATE OR REPLACE FUNCTION testing_insert_trigger()
RETURNS trigger AS
$$
BEGIN
IF EXISTS (SELECT 1 FROM testing WHERE gid = NEW.gid) THEN
NEW.gid := nextval('testing_gid_seq'::regclass);
END IF;
RETURN NEW;
END;
$$ language 'plpgsql';
Binding the function to the table...
CREATE TRIGGER testing_insert
BEFORE INSERT ON testing
FOR EACH ROW EXECUTE PROCEDURE testing_insert_trigger();
This will automatically assign new IDs where the gid
already exists. For example, the following query will now duplicate all data in the table instead of failing:
INSERT INTO testing (SELECT * FROM testing);
Of course, this approach can compromise the intent of your primary key, so use it carefully.
For debugging going to Menu -> View -> Panels -> Log Messages Panel worked for me. In the error log panel showing up, go to WFS-Tab and check for any error messages. It's not very verbose but could lead to the right track.
In my case, this helped to find out, that the DescribeFeatureType url in the GetFeature-XML was wrong, so this request failed.
Best Answer
As you said, it is a known bug which has, according to the bug tracker, been taken care of. The next point release is due tomorrow (2017/07/21), so we should hopefully see that bug corrected soon!