- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我要在里面导入没有时区信息的数据(但是,我知道我要导入的数据的具体时区),但是我需要timestamp with time zone
数据库中的格式。一旦我导入它并将时间戳数据类型设置为 timestamp with time zone
,Postgres 将自动假定表中的数据来 self 的时区并将我的时区分配给它。不幸的是,我要导入的数据不是来 self 的时间范围,所以这不起作用。
数据库还包含不同时区的数据。但是,一张表中的时区始终相同。
现在,我可以在导入数据之前(使用SET time zone
命令)将数据库的时区设置为我要导入的数据的时区,然后再改回我的时间导入完成后,我很确定已经存储的数据不会受到数据库时区更改的影响。但这似乎是一种非常肮脏的方法,以后可能会导致问题。
我想知道是否有更优雅的方式来指定导入的时区,而无需在数据本身中包含时区数据?
此外,我还没有找到在导入后编辑时区信息的方法。假设整个表具有相同的时区偏移量(即如果在数据输入/导入时分配了错误的时区),有没有一种方法不转换,而只是编辑整个表的时区?
编辑:
我设法在导入时指定了一个时区,整个命令是:
set session time zone 'UTC';
COPY tbl FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
set session time zone 'CET';
然后使用 session 时区导入数据。我假设这对其他连接同时对数据库的任何其他查询没有影响?
编辑 2:
后来我发现了如何更改表的时区:
PostgreSQL update time zone offset
我想在导入后更改表的时区比使用 session 临时更改本地时区更优雅。当然假设整个表具有相同的时区。
所以代码现在应该是这样的:
COPY tbl FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
UPDATE tbl SET <tstz_field> = <tstz_field> AT TIME ZONE '<correct_time_zone>';
最佳答案
为导入 session 设置时区比稍后更新值很多更有效率。
我的印象是您将时区视为适用于表中其他未更改值的设置。但它根本不是那样的。将其视为输入/输出修饰符。实际 timestamp
值(带或不带时区)始终在内部存储为 UTC 时间戳(自 '2000-01-01 00:00'
)。更多详细信息:
第二个示例中的 UPDATE
使表的大小加倍,因为每一行都无效并添加了新版本(这就是 UPDATE
使用 MVCC 的方式)在 Postgres 中)。除了昂贵的操作之外,VACUUM
稍后将不得不做更多的工作来清理表膨胀。非常低效。
为 session SET
本地时区绝对安全。这不会以任何方式影响并发操作。顺便说一句,SET SESSION
与普通 SET
相同,因为 SESSION
无论如何都是默认值。
如果您想绝对确定,您可以使用 SET LOCAL
将设置限制为当前事务。我引用手册 here
The effects of
SET LOCAL
last only till the end of the current transaction, whether committed or not. A special case isSET
followed bySET LOCAL
within a single transaction: theSET LOCAL
value will be seen until the end of the transaction, but afterwards (if the transaction is committed) theSET
value will take effect.
放在一起:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
检查:
SHOW timezone;
关于postgresql - 更改数据的时区值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12675723/
在我的 Rails (3.0) 应用程序中,我使用助手 time_zone_select() 来使用时区。它生成时区名称,如“(GMT+01:00) Paris”... 但这些名称与 MySQL 中的
我正在解析格式为的日期: SimpleDateFormat formatter = new SimpleDateFormat("EE MMM dd HH:mm:ss Z yyyy"); 当我这样做的时
我在 Android 上使用 ACTION_TIMEZONE_CHANGED Intent 过滤器来响应时区更改。 我注意到 Jodas 当前时区此时没有更新,使用:DateTimeZone.getD
我有一个旧版 Windows 应用程序,它从数据库读取数据。其中一列是“TimeZoneInfoId”。在传统世界中,它是由另一个 Windows 应用程序编写的,因此它存储 Windows 字符串:
我是数据库开发新手,目前从事 MySQL 工作。我有一列包含美国的所有时区。我希望能够获取每行中每个时区的当前时间(只有时间,没有日期)。 时区数据如下:+05:00、-03:00 等等 这就是我尝试
我正在尝试了解 session 时区在 PostgreSQL 中的工作原理。 当我将 session 时区设置为“01:00”时,返回日期为“-01:00”。符号总是颠倒的,我不理解这种行为。 这怎么
我写入我的 mongoDB 数据库,例如开始日期,开始日期始终是一周中的星期一(我使用并且我在欧洲中部时区)。 "startDate" : ISODate("2014-12-28T23:00:00Z"
是否有详尽的 MySQL 时区列表? 似乎 MySQL 设置中 time_zone 的有效值取决于主机操作系统,但我一直无法找到可能值的列表。 我需要时间显示卡尔加里本地时间。 最佳答案 默认情况下,
我已经在 config/app.php 中配置了时区至 Europe/Lisbon . 如果我做 return date_default_timezone_get(); , 返回 Europe/Lis
我在整个脚本中广泛使用 unix 时间,通常我将时区设置如下: date_default_timezone_set('Europe/London'); 这一直工作正常,直到上周末时钟回退一个小时,我怀
我有一个字符串,2013-10-07T23:59:51.205-07:00,想将其转换为 Java 日期对象。我收到解析错误。 date = new SimpleDateFormat("yyyy-MM
如何更改日志文件名中的 log4j 时区? 我的 log4j.xml 文件:
在JAVA中,如何确定所有日期都作为GMT日期返回? 例如,即使我尝试使用GMT语言环境强制使用DateFormat,它也会应用某种逻辑来检索BST日期。 public static void mai
好吧,这是我遇到过的最奇怪的错误之一! 首先:我不是 Python 程序员,该脚本是由 friend 编写的(我认为他的大部分内容来自示例)。 该脚本的用途:将日历信息(CET 时间)从 XML 文件
我们有一个网站,目前在某个时间(由用户选择)运行拍卖,这一切都工作正常,因为当服务器到达该时间时,拍卖就会开始。然后我们必须添加时区,具体取决于用户居住的地方。然后,根据所选的下拉菜单,这将增加或减少
我陷入了这个逻辑。我正在开发一个消息调度项目,我的客户来自不同的国家。让我们考虑一下亚洲(不遵守夏令时)和美国/纽约(遵守夏令时)。 现在,我正在编写以下查询来获取距当前时间 10 分钟间隔内的时间表
我尝试返回特定时区的值,但我遇到了一些奇怪的响应行为: SELECT created_at AT TIME ZONE 'US/Pacific' - created_at, NOW() A
我正在尝试将不带时区值(例如“31.05.2015”)的字符串转换为 NSDate。 我的 DateFormatter 有什么问题?它返回日期 2015-05-31 22:00:00 +0000当我尝
我已经成功地将我的本地 tzinfo 导入到 mysql 中,我几乎已经了解了关于如何存储和使用这些数据的所有细节,除了一个字段。有一个名为 Transition_type_id 的数字字段(在表 t
为什么以下行返回的 TimeZone 显示不正确的时间: TimeZone.getTimeZone("America/Ottawa") 现在显示晚上 10:26 [亚特兰大时间现在是 6:26,Ott
我是一名优秀的程序员,十分优秀!