【问题标题】:How to create session level table in PostgreSQL?如何在 PostgreSQL 中创建会话级表?
【发布时间】:2012-05-28 12:09:47
【问题描述】:

我正在开发一个使用 Spring、Hibernate 和 PostgreSQL 9.1 的应用程序。要求是用户可以从浏览器上传批量数据。

现在每个用户上传的数据非常粗糙,需要大量验证才能放入实际的事务表中。我希望在用户上传时创建一个临时表;在数据成功转储到这个临时表后,我将调用一个过程来执行验证并将数据从临时表中取出到事务表的实际工作。如果遇到任何错误,我会将日志转储到任何其他表,以便用户可以从浏览器了解他们的上传状态。

在 PostgreSQL 中,我们是否有类似临时的会话级表?

【问题讨论】:

  • 为什么每个上传的文件都需要一个表格?为什么不将所有文件存储在同一个表中?
  • Echo JB Nizat...带有“file_id”列的表会更有意义,然后不断为每个上传的用户创建一个临时表...存储过程很难处理动态临时表命名。但我假设您有每个用户上传的动态列数(因此您需要动态列名,因此需要一个临时表)。这不是一项容易的任务,最好通过重新考虑用户请求来处理......这是一次性数据加载/初始化还是一个持续的过程?如果这是一个持续的过程,我强烈建议重新访问用户 req。

标签: postgresql hibernate


【解决方案1】:

来自the 9.1 manual

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ( [
  { column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
    | table_constraint
    | LIKE parent_table [ like_option ... ] }
    [, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace ]

这里的关键词是 TEMPORARY,尽管表不一定是临时的。它可能是您在插入之前截断的永久表。整个操作(插入和验证)必须包含在事务中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2016-11-15
    • 2010-12-13
    • 2014-06-17
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多