Hi, Here is patch for RM2274 (patch credits to Wayne Winch Jr)
I tested this patch with below scenarios and all are working fine: 1. Table with 2 columns with 2nd col as primary key. 2. Table with 3 columns with 3rd and 2nd cols as primary key. 3. Table with 4 columns with 3rd and 2nd and 4th cols as primary key. 4. Table with 4 columns with 2nd and 4th cols as primary key. 5. Table with 4 columns with 4th col as primary key. 6. Table with 4 columns with 1st col as primary key. -- *Harshal Dhumal* *Software Engineer* EnterpriseDB India: http://www.enterprisedb.com The Enterprise PostgreSQL Company On Wed, Mar 22, 2017 at 3:27 PM, <redm...@postgresql.org> wrote: > Issue #2274 has been updated by Dave Page. > > - *Priority* changed from *Normal* to *Urgent* > - *Target version* set to *1.4* > > ------------------------------ > Bug #2274: Row Deletion Against Tables With PKs Not at Ordinal 0 Position > Fail <https://redmine.postgresql.org/issues/2274#change-6260> > > - Author: Wayne Winch Jr > - Status: New > - Priority: Urgent > - Assignee: > - Category: > - Target version: 1.4 > - Platform: > - Area: User Interface > > If pgAdmin4 is used to delete one or more rows for tables having primary > keys that do not occupy the first column(s) of said table, the deletion > will fail with Python error -- > > File > "/usr/lib/python3.5/site-packages/pgadmin4-web/pgadmin/tools/sqleditor/command.py", > line 499, in save > row[keys[int(k)]] = v > IndexError: list index out of range > > SIDE NOTE: A separate problem exists whereby pgAdmin4 does not adequately > indicate that an internal error (as listed above) has occurred as it merely > switches from the Data Output tab to the Messages tab whereby an old > message unrelated to the current or any exception is unhelpfully shown. > > The row deletion problem is caused by faulty logic within the command.py > file, TableCommand class, save() method in the 'deleted' operation branch > (Line 499) as indicated in the stack trace: > > row[keys[int(k)]] = v > > By changing this line to the following, the index mapping is performed > correctly (by bypassing keys list) for tables with non-ordinal, zero-based > PK column(s): > > row[changed_data['columns'][int(k)]['name']] = v > > This problem seems to have been introduced in pgAdmin4v1.3. > ------------------------------ > > You have received this notification because you have either subscribed to > it, or are involved in it. > To change your notification preferences, please click here: > https://redmine.postgresql.org/my/account >
diff --git a/web/pgadmin/tools/sqleditor/command.py b/web/pgadmin/tools/sqleditor/command.py index 9420e08..be7f21f 100644 --- a/web/pgadmin/tools/sqleditor/command.py +++ b/web/pgadmin/tools/sqleditor/command.py @@ -496,7 +496,7 @@ class TableCommand(GridCommand): for k, v in row.items(): # Set primary key with label & delete index based mapped key try: - row[keys[int(k)]] = v + row[changed_data['columns'][int(k)]['name']] = v except ValueError: continue del row[k]
-- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers