Hi Ryan,

Thanks for the transaction suggestion. We will do that.
I provided a simplistic example for constraints, but I think I have an answer 
now.

Thanks,
Vikas


On Nov 21, 2016, at 12:24 PM, R Smith <rsm...@rsweb.co.za> wrote:

> 
> 
> On 2016/11/21 9:57 PM, Vikas Aditya wrote:
>> Hi everyone,
>> 
>> I have a DB migration question. I have a table called "employees" and it has 
>> a UNIQUE constraint on "employee_email". With some new features being 
>> requested, I need to relax the constraint and have a new constraint on 
>> "employee_email" + "employee_number". Since SQLite ALTER table command can't 
>> modify an existing constraint, I have thought about creating a new table 
>> with the new constraint and then copying everything from old table to new 
>> table and afterwards dumping the old table. It does work but my question is 
>> what is the fastest and most memory efficient way to copy data from old 
>> table to new table?
> 
> Firstly, are you sure about this constraint relaxing? Basically by altering 
> the constraint you are saying (in standard English) that you believe there 
> CAN be an entry where two people with different Employee-numbers could have 
> the same e-mail address, or, put another way, you believe that there could be 
> two different people with different e-mail addresses which could have the 
> same employee number... Which doesn't sound like any company I know of - 
> usually any employee within a company must have both a unique e-mail address 
> and unique employee number. (It might be different but valid for you, I'm 
> just suggesting to double-check the premise for that decision).
> 
> 
>> 
>> Currently we are using:
>> 
>> sql = "INSERT INTO {} SELECT * FROM {}".format(totable, fromtable)
>> cur.execute(sql)
>> 
>> So, a single line statement can copy from old to new. But will this work 
>> fine even if I have 100s of thousands of records in old table? Or will this 
>> load pretty much entire data into memory and then copy to new?
>> Looking for other optimal ways to copy data from one table to another if 
>> this is not optimal.
> 
> Your example would work great - SQLite is very good at doing this and it 
> would use memory correctly.
> It is of course unlikely a relaxed constraint would fail when copying from a 
> table with a more strict set, but it is possible, and it is possible 
> something else might go wrong, so just to be sure, start a transaction before 
> renaming the old table, making the new table and copying the data (you can do 
> all of that in one set of instructions), then commit or rollback based on the 
> result from the cur.execute().
> 
> Good luck!
> Ryan
> 
> 
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to