【问题标题】:Duplicating a table in Firebird在 Firebird 中复制表格
【发布时间】:2017-10-26 15:11:09
【问题描述】:

我目前正在编写一个将 csv 文件读入 Firebird 数据库的 (C++) 程序。在算法期间,我的表被修改。 由于整个读取过程需要几分钟,所以我将读取部分设置为可选,因此如果数据库已经充满数据,用户可以决定不更新它。

多次运行程序时,我想使用原始数据,而不是上次运行时修改过的数据,所以我想到了类似

create table table1_backup as (select*from table1);

然后,在重新启动程序时(以防我们不想更新数据)

删除表table1; create table table1 as (select*from table1_backup);

看起来,在 Firebird 中复制表格并不能以这种方式工作。

还有其他想法吗?

【问题讨论】:

  • 程序运行之间是否需要在新表中持久化数据?还是你总是清除它?不同的程序可以一起使用该新表还是只有一个程序可以独占使用它?似乎您不需要创建表,只需加载要在断开连接时完全删除的数据。那是 GTT - stackoverflow.com/tags/global-temp-tables/info

标签: firebird


【解决方案1】:

您不能在 Firebird 中从另一个表创建表。另见Does Firebird support creating tables using SELECT statement?

正如 cmets 中的 Arioch 'The 所建议的那样,您可能正在寻找 global temporary tables。全局临时表具有持久性 DDL,但数据仅对单个事务 (on commit delete rows) 或仅对插入数据的连接 (on commit preserve rows) 可见。

在对数据库进行永久性更改之前,您可以使用临时表作为暂存区。

【讨论】:

    猜你喜欢
    • 2013-03-26
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多