Browsing any GP table threw "column ctid does not exist" because the
table-viewer's pagination query unconditionally appended `ctid::text`
to the SELECT. AO and AOCO tables (the dominant storage in GP)
genuinely have no ctid, and even on heap tables the value isn't
reliable across segments — so editing by ctid would be wrong even when
the column exists.
- get_table_data: skip the ctid column entirely on Greenplum (`SELECT *`
instead of `SELECT *, ctid::text`); ctids field stays as an empty Vec.
- update_row / delete_rows: when the table has no PK on a GP connection,
return an actionable error instead of falling through to the ctid
path. Tells the user to add a PK or use raw SQL.
Vanilla Postgres behavior is unchanged.