postgres与ubuntu下的外键约束同步

时间:2013-12-17 16:39:34

标签: sql database postgresql synchronization postgresql-9.1

我在3个本地分支机构中有一个本地Postgres服务器,我需要将三个同步到一个中央数据库我在PostgreSQL文档中尝试了数据库复制它为Master-Master Sync工作但是问题是

在我的数据库中,我有外键,因此在同步时,如果来自Slave数据库的PK具有已存在于master数据库中的id,则它将具有序列中的新id,则所有外键记录仍具有旧ID

所以,如果你能帮助我解决这个或一个好的教程,甚至是另一个解决方案

提前致谢

2 个答案:

答案 0 :(得分:0)

我轻松地添加外键约束只需制作外键sql命令的txt文件并给出';'在每个sql命令之后并使用下面的代码它完美地运行...

private void FunAddForeignKeys()
    {
        SqlConnection clientConn = new SqlConnection(lconString);
                    if (clientConn.State == ConnectionState.Closed)
                        clientConn.Open();
                    System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(GetSql("ForeignKeyQueries.txt"), clientConn);

        try
        {
            Command.ExecuteNonQuery();
            MessageBox.Show("Foreign keys added");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            // Closing the connection should be done in a Finally block
            clientConn.Close();
        }
}
        private string GetSql(string Name)
        {
         try
        {
            // Gets the current assembly.
            Assembly Asm = Assembly.GetExecutingAssembly();

            // Resources are named using a fully qualified name.
            Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name);

            // Reads the contents of the embedded file.
            StreamReader reader = new StreamReader(strm);
            return reader.ReadToEnd();

        }
        catch (Exception ex)
        {
            MessageBox.Show("In GetSQL: " + ex.Message);
            throw ex;
        }
}

答案 1 :(得分:0)

  

在我的数据库中,我有外键,因此在同步时,如果来自Slave数据库的PK具有已存在于master数据库中的id,则它将具有序列中的新id,则所有外键记录仍具有旧ID

将原始分支作为主键的一部分。然后,您可以确保始终如一地跟踪所有内容。这是一个多列主键确实闪耀的区域。