更改数据的时区值

2024-04-27

我必须导入不带时区信息的数据在其中(但是,我知道我要导入的数据的具体时区),但我需要timestamp with time zone数据库中的格式。一旦我导入它并将时间戳数据类型设置为timestamp with time zone,Postgres会自动假设表中的数据来自我的时区,并将我的时区分配给它。不幸的是,我想要导入的数据不是来自我的时间范围,所以这不起作用。

该数据库还包含不同时区的数据。但是,一张表中的时区始终相同。

现在,我可以在导入数据之前将数据库的时区设置为我要导入的数据的时区(使用SET time zone命令)并在导入完成后将其更改回我的时区,并且我非常确定已经存储的数据不会受到数据库时区更改的影响。但这似乎是一种非常肮脏的方法,并且可能会在以后引起问题。

我想知道是否有一种更优雅的方法来指定导入的时区,而无需在数据本身中包含时区数据?

另外,我还没有找到导入后编辑时区信息的方法。有没有一种方法不进行转换,而是简单地编辑整个表的时区,假设整个表具有相同的时区偏移量(即,如果在数据输入/导入时分配了错误的时区偏移量)?

Edit:
我设法在导入时指定时区,整个命令是:

set session time zone 'UTC';
COPY tbl FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
set session time zone 'CET';

然后使用会话时区导入数据。我认为这对同时从其他连接对数据库进行的任何其他查询没有影响?

Edit 2:
后来我发现如何更改表的时区:
PostgreSQL 更新时区偏移 https://stackoverflow.com/questions/6492657/postgresql-update-time-zone-offset?rq=1

我认为在导入后更改表的时区然后使用会话临时更改本地时区会更优雅。当然,假设整个表具有相同的时区。

所以现在的代码应该是这样的:

COPY tbl FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
UPDATE tbl SET <tstz_field> = <tstz_field> AT TIME ZONE '<correct_time_zone>';

It is a lot为导入会话设置时区比稍后更新值更有效。

我的印象是,您将时区视为适用于表中其他未更改的值的设置。但事实根本不是那样的。将其视为输入/输出修饰符。实际的timestamp值(有或没有时区)是always内部存储为 UTC 时间戳(自'2000-01-01 00:00')。更多细节:

  • 在 Rails 和 PostgreSQL 中完全忽略时区 https://stackoverflow.com/questions/9571392/ignoring-timezones-altogether-in-rails-and-postgresql/9576170#9576170

The UPDATE在第二个示例中,表的大小加倍,因为每一行都无效并添加了新版本(这就是UPDATEMVCC https://www.postgresql.org/docs/current/interactive/mvcc.html在 Postgres 中)。除了昂贵的手术费用外,VACUUM稍后将不得不做更多的工作来清理表的膨胀。效率很低。

It is 万无一失 to SET会话的本地时区。这不会以任何方式影响并发操作。顺便提一句,SET SESSION和普通的一样SET因为SESSION无论如何都是默认的。

如果你想成为绝对地当然,您可以将设置限制为当前交易 with SET LOCAL。我引用手册here https://www.postgresql.org/docs/current/interactive/sql-set.html

的影响SET LOCAL仅持续到当前结束 事务,无论是否已提交。一个特殊情况是SET已关注 经过SET LOCAL在单笔交易中:SET LOCAL值将是 直到交易结束才看到,但之后(如果 事务已提交)SET值就会生效。

放在一起:

BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;

Check:

SHOW timezone;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改数据的时区值 的相关文章

随机推荐

  • Java 方法存根

    这就是我必须做的 为下面的 main 调用的方法定义存根 每个存根应打印 FIXME Finish methodName 后跟换行符 并应返回 1 输出示例 FIXME Finish getUserNum FIXME Finish getU
  • 来自外部 .diff 文件的交互式补丁

    Linux 是否有命令或程序允许交互式地修补源代码 在屏幕上打印每个块并在将其应用到文件之前等待确认 就像是git add p 但是从另一个 diff 文件中进行更改 您始终可以在 shell ruby python 中编写脚本 逐行读取该
  • 使用 .load() 用图像填充 div 以方便使用 slider1.7

    所以我试图用外部 html 文件中的图像填充幻灯片 div 但问题似乎是新图像确实可以通过 load 拉取 但简单的滑块无法看到新图像 甚至只显示空白尽管在 div 中 有新的图像链接 在我的 html 中 我有这个
  • 进度条摆动效果

    摆动垂直进度条 我学会了如何构建一个整洁的 动态大小的垂直进度条 其中带有横栏这个问题 https stackoverflow com questions 22337851 css vertical progress bar noredir
  • PHP:如果我以非静态方式调用静态方法怎么办?

    我不是面向对象编程专业人士 我有一个愚蠢的问题 class test public static function doSomething arg foo I ate your arg return foo 那么正确的调用方式doSomet
  • 使用 WinAPI 在 C# 中隐藏任务栏窗口

    相信我 我用谷歌搜索过它 并期望它是一个相当容易找到的东西 事实证明并非如此 我有窗把手 但没有表格 我该怎么做 谢谢 声明这些 DllImport user32 dll SetLastError true static extern in
  • LogStash 无法从许可证中检索许可证信息。响应代码“401”通过 URL“http://elasticsearch:9200/_xpack”联系 Elasticsearch

    我正在努力让 Docker LogStash 连接到 Docker ElasticSearch 并启用 xpack 安全性 主要日志有 logstash 1 2020 05 20T22 41 03 950 WARN deprecation
  • 单向绑定

    我知道这个问题存在 但我在答案中找不到解决方案 我有一个表单 其中数据绑定到自定义类 以便在更改表单时 自定义类会收到通知 相反的情况永远不会发生 myForm DataBindings Add Items ItemsController
  • 同时安装多个自制公式

    您可以通过安装多个自制程序brew install package1 package2 但是 如果您有一个文本文件 其中包含您想要安装的所有软件包 你会怎么做 brew install lt packages txt不起作用 它给了我回应
  • 节点 aws-sdk s3 文件上传大小

    当使用 Node js 的 aws sdk npm 插件时 我可以使用以下代码上传 50kb 的 pdf 到 AWS s3 var params Bucket BUCKET Key pdf key Body file ContentType
  • 如何使 React Native Android 应用程序崩溃

    我正在研究react native firebase crashlytics 我正在使用 rnfirebase 入门套件 在那里 我们将 crashlytics 与该项目集成 现在 我想让我的应用程序崩溃以检查崩溃报告 You need t
  • Rails 3.1 与 3.0 AJAX 语法差异。 jQuery 中的等效语句?

    完成 使用 Rails 进行敏捷 Web 开发 第 4 版并点击开始 AJAX 部分 第 11 章迭代 F2 在示例代码中 使用 Rails 3 0 的书籍建议创建 app views line items create js rjs 文件
  • Python——“对象布局”

    有人可以描述以下异常吗 什么是 对象布局 以及它是如何定义的 谢谢 Traceback most recent call last File test gui py line 5 in
  • 表面参数化

    我正在尝试在表面网格上获取参数化表面 从 STL 格式文件中读取 我阅读了 CGAL 示例目录提供的一些有关参数化的示例 我知道应该提供接缝线才能在任意表面上获得参数化表面 但我还是不明白如何制作接缝线 下面是我到目前为止的代码 总而言之
  • 检查 Web 服务中的 Json

    我的 json 有问题 我希望我的 Json 看起来像 data phoneId 1 token APA91bF2tN5g1TtULFE5tysRMAarygjX4w9hjTGCqT3SL PwiMV6aqTtkV3lpqLkc7msVfE
  • Google Sheets 转置具有多个值的数据

    我试图按如下方式显示示例数据 我可以使用数据透视表和多个值来完成此操作 没有任何问题 但希望找到一种使用查询或其他方法的方法 使用下面的公式部分解决了此问题 但不包括 其他 列 Index Transpose Unique Filter B
  • 为什么输出窗口无法显示结果。图像处理-线条检测

    该霍夫变换程序应该在执行时显示源图像 输出图像 带有图像的边缘检测结果窗口 但是 即使源图像和边缘检测结果 输出图像窗口也不会显示任何内容 链接https github com eToTheEcs hough transform blob
  • Spring Data Redis JedisConnectionException:流意外结束

    雷迪斯3 0 5Spring数据Redis 1 3 6绝地武士2 6 3 我们的 Web 应用程序通过 pub sub 从 Redis 接收数据 还以键 值对的形式在 Redis 上执行数据读 写 读 写发生在监听线程 独立监控线程和htt
  • 如何解决 CruiseControl.NET 中 任务中的“只能指定一个项目”错误

    我正在尝试以相当直接的方式使用 CruiseControl NET 版本 1 3 0 2918 中的任务
  • 更改数据的时区值

    我必须导入不带时区信息的数据在其中 但是 我知道我要导入的数据的具体时区 但我需要timestamp with time zone数据库中的格式 一旦我导入它并将时间戳数据类型设置为timestamp with time zone Post