DB2 backup and restore db table preserving foreign key constraints - reference
I'm currently having issue going through a test backup and restore of database table on my development machine for db2. Was never entirely successful. Although I was able to restore all data after a drop and re-create of the table, I wasn't able to reset the foreign key constraint as I got SQL error complaining that keys don't match. Here's my exact steps, I'm sure not entirely the right way to do it, but it does eventually restore the 5423 rows of data:
The process
export to /export/home/dale/comments.ixf of ixf messages /export/home/dale/msg.txt select * from .comments
Note: step 1 exports 5423 rows of data to a location
drop table .comments
import from /export/home/dale/comments.ixf of ixf create into .comments
Note: step 3 here creates the table but does not insert any data rows
load client from /export/home/dale/comments.ixf of ixf modified by identityoverride replace into .comments
Note: up until this step, I'm able to insert the 5423 rows of data in the recreated db table
alter table .comments add FOREIGN KEY (comments_id) REFERENCES .news (article_key)
Note: here alter table fails as db2 complaints that some comments_id does not match article_key
Could anyone help with my problem here? Thanks in advance
The error means that some of the rows you IMPORT into the Comments table refer to rows that do not exist in the News table.
You might not be forming the constraint correctly. The column name "comment_id" sounds like the primary key to the Comments table. You want the foreign key, which matches the primary key of the News table. It might also be called "article_key" or "article_id".
ALTER TABLE Comments
ADD FOREIGN KEY( article_key)
REFERENCES News( article_key);
If "comment_id" is really not the primary key of the "Comments" table, then the problem comes from not backing up and restoring both the News and Comments table at the same time.
You can either EXPORT and IMPORT the News table along with the Comments table, or remove the Comments that refer to missing News rows with something like this
DELETE FROM Comments
WHERE comments_id NOT IN (
SELECT article_key
FROM News
)
Before you do this, you might want to try listing the Comments which would be deleted by the above query
SELECT *
FROM Comments
WHERE comments_id NOT IN (
SELECT article_key
FROM News
)
I found a solution to my problem as well as my comments above,
user980717 resolved my first problem where I set the wrong column as the foreign key
For my 2nd issue, i.e. "SQL0668N Operation not allowed for reason code "1" on table "tablename". SQLSTATE=57016", I need to run the following command "set integrity for niwps.comments immediate checked" to ensure data satisfied all constraints defined in the table. And thanks to all who took the effort in helping me with my problems. Cheers
Related
can we create datasync between two tables without indexes in azure data sync
can we sync two tables of two different databases in azure without indexes. As, we all know ,if two databases has to be in sync hub database and member data base should have same schema. But is there chance of avoiding indexes. please help me with this
Each table needs to have a primary key and you cannot avoid that. Please read the following excerpt from Microsoft documentation: Each table must have a primary key. Don't change the value of the primary key in any row. If you have to change a primary key value, delete the row and recreate it with the new primary key value. Source here.
Duplicate entry '??' for key 'emp_name_unique2'
When I design my table, there comes a error: Duplicate entry '??' for key 'emp_name_unique2' My design table: When I save it, comes the error. Where is the problem? EDIT My data in t_employee:
That is, you see the emp_name, if you want to set it to unique, you should make sure the value is unique first. You have many same ?? in the emp_name. In general, Design table should before add data.
How could I create relationships between tables in JetBrains' DataGrip?
I am using DataGrip by JetBrains in my work. It is ok, but I don't know how to create relationships between tables like in this picture:
It's a two step procedure. In the first step, you must modify your table to add foreign key constraint definitions. In the second step, you can display the table diagram. First, right click on the name of your table in DataGrip, then choose Modify Table. You will see four tabs: Columns, Keys, Indices, and Foreign Keys. Choose the Columns tab. Right click on the column name you want to become a foreign key, and choose New Foreign Key. The window will switch to its Foreign Keys tab with some information filled in. Fill in your "target table". You may also have to write in the target column name in the SQL statement's REFERENCES phrase. Review all the information now in the Modify Table window, and, when satisfied, click "Execute". Second, right click again on the name of your table in DataGrip, and this time choose Diagrams > Show Visualisation. You should now see a diagram displaying the relations between your original table and the referenced tables. In DataGrip Help, you can look at the Working with the Database Tool Window page for its Modifying the definition of a table, column, index, or a primary or foreign key section. There is a very short procedure description, there. Wikipedia has an example in its Defining foreign keys article section that may be useful to you while working in DataGrip's Modify Table window. I did this procedure in DataGrip 2017.1.3, and I don't know whether other versions vary.
Generally: from the context menu or by pressing Ctrl+Alt+U. If you have found this picture, one more step was to go deeper in the website and you would get to this page: https://www.jetbrains.com/datagrip/features/other.html And there is an explanation how to do it.
Try this small SQL script which creates 3 tables. I think you will find this work well. CREATE TABLE product ( category INT NOT NULL, id INT NOT NULL, price DECIMAL, PRIMARY KEY(category, id) ); CREATE TABLE customer ( id INT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE product_order ( no INT NOT NULL AUTO_INCREMENT, product_category INT NOT NULL, product_id INT NOT NULL, customer_id INT NOT NULL, PRIMARY KEY(no), INDEX (product_category, product_id), INDEX (customer_id), FOREIGN KEY (product_category, product_id) REFERENCES product(category, id) ON UPDATE CASCADE ON DELETE RESTRICT, FOREIGN KEY (customer_id) REFERENCES customer(id) ) ;
Inverted index: Delete then Insert pattern?
I have an inverted index table on a table of Users. The table allows querying users by last name. It is called "users_by_lastname". Primary key of this table has "lastname" in it, so it cannot be updated. If a user changes their last name in the main "Users" table, should I be deleting and re-inserting into the inverted index table, "users_by_last name"? I cannot update a primary key column in Cassandra... Are there other patterns that handle this better?
In Cassandra 3.0 you can deal with this problem by creating the inverted index table as a materialized view of the Users table. Then Cassandra will take care of maintaining the view automatically whenever you update the base table. On earlier versions of Cassandra your only option would be to do a delete and then insert with the new last name in the application maintained inverted index table.
Adding Column Using Subsonic 3.0.0.5 Migration
I want to know that How to Insert New Columns to an existing database Table using Subsonic 3.0.0.5 MIGRATIONS. Basically I want to alter an existing table in MS SqlServer database and add three more columns into it. Please tell me How I will be able to do it Regards, Naveed Khan
Just change your object and the column will be added/updated whatever. So if you have an object called "Post" and add a property, it will be added as a column in the DB. See this video... http://subsonicproject.com/docs/Simple_Repo_5_Minute_Demo
It has to do with the conventions of SubSonic. As the object is singular, it adds the plural to the table (or expects the table to be plural). So it will expect an object called Order to map to a table called Orders. There is only two solutions that I can see for you 1) Rename you table to the plural name. 2) Modify Subsonic code to remove the adding of the plural.