Index: src/alter.c ================================================================== --- src/alter.c +++ src/alter.c @@ -1021,10 +1021,14 @@ if( bFKOnly==0 ){ sCtx.pList = renameTokenFind( &sParse, (void*)sParse.pNewTable->aCol[sCtx.iCol].zName ); sCtx.nList = 1; + assert( sCtx.iCol>=0 ); + if( sParse.pNewTable->iPKey==sCtx.iCol ){ + sCtx.iCol = -1; + } sqlite3WalkExprList(&sWalker, sParse.pNewTable->pCheck); for(pIdx=sParse.pNewTable->pIndex; pIdx; pIdx=pIdx->pNext){ sqlite3WalkExprList(&sWalker, pIdx->aColExpr); } } Index: test/altercol.test ================================================================== --- test/altercol.test +++ test/altercol.test @@ -180,8 +180,25 @@ } {2 5} do_catchsql_test 6.1 { ALTER TABLE sqlite_stat1 RENAME tbl TO thetable; } {1 {table sqlite_stat1 may not be altered}} + +#------------------------------------------------------------------------- +do_execsql_test 6.0 { + CREATE TABLE blob( + rid INTEGER PRIMARY KEY, + rcvid INTEGER, + size INTEGER, + uuid TEXT UNIQUE NOT NULL, + content BLOB, + CHECK( length(uuid)>=40 AND rid>0 ) + ); +} + +breakpoint +do_execsql_test 6.1 { + ALTER TABLE "blob" RENAME COLUMN "rid" TO "a1"; +} finish_test