我有一个实时服务器和开发盒,分别称它们为 live 和 dev,它们都运行 postgresql。我可以使用 pgadmin4 轻松查看和管理两者,并且当我在开发箱上以调试模式通过网站运行时,两者都功能齐全,一个是实时网站,另一个是。很普通的设定。
多年来,我一直在运行我编写的相同 bash 脚本,该脚本转储实时数据库,然后在开发箱上恢复它,因此我拥有最新的实时快照。
今天,这让我失望了标题消息:
pg_restore: [archiver] unsupported version (1.14) in file header
Run Code Online (Sandbox Code Playgroud)
我试图诊断这个问题,并在网上进行了广泛的搜索,但我很困惑并且失败了,所以在这里我掌握了专业知识。
为了帮助我将分享以下内容:
$ pg_dump --version
pg_dump (PostgreSQL) 10.11 (Ubuntu 10.11-1.pgdg18.04+1)
$ pg_restore --version
pg_restore (PostgreSQL) 10.11 (Ubuntu 10.11-1.pgdg18.04+1)
$ pg_dump --host=live.lan --port=5432 --dbname=mydb --username=myuser --format=custom > test.backup
$ ls -l test.backup
-rw-r--r-- 1 bernd bernd 2398358 Dec 23 23:40 test.backup
$ file test.backup
test.backup: PostgreSQL custom database dump - v1.14-0
$ pg_restore --dbname=mydb test.backup
pg_restore: [archiver] unsupported version (1.14) in file …Run Code Online (Sandbox Code Playgroud) 这几乎肯定是一个重复的问题,在这种情况下道歉,但我一直在搜索大约半小时的SO,但在这里找不到答案.对不起,我可能使用了错误的搜索字词.
我有一个用户模型和一个提交模型.每个Submission都有一个名为user_submitted的ForeignKey字段,用于上传它的用户.
class Submission(models.Model):
uploaded_by = models.ForeignKey('User')
class User(models.Model):
name = models.CharField(max_length=250 )
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:如何获得提交最多的三个用户的列表?
我尝试在User模型上创建num_submissions方法:
def num_submissions(self):
num_submissions = Submission.objects.filter(uploaded_by=self).count()
return num_submissions
Run Code Online (Sandbox Code Playgroud)
然后做:
top_users = User.objects.filter(problem_user=False).order_by('num_submissions')[:3]
Run Code Online (Sandbox Code Playgroud)
但这失败了,我尝试过的所有其他事情都失败了.我可以使用智能数据库查询实际执行此操作吗?或者我应该在视图文件中做些更hacky的事情?
PostgreSQL 文档相当详尽且有用:
https://www.postgresql.org/docs/9.2/datatype-datetime.html#DATATYPE-TIMEZONES
但似乎忽略了一个相当有用的点的清晰度,在这个点上清晰度可能是必要的和有帮助的。阅读了文档和各种相关的 stackoverflow 问题和回复后,我怀疑以下情况是正确的:
PostgreSQL 数据类型
timestamp with timezone存储日期和时间以及 utcoffset(+ve 在格林威治以东)
我会进一步推断并怀疑这是真的:
PostgreSQL 数据类型
timestamp with timezone将日期和时间以及 utcoffset(+ve 在格林威治以东)存储到分钟分辨率。
我的问题与这些推论有关。它们是否正确,如果正确,可以转发哪些证据来证实它们,如果不正确,可以转发哪些相反的证据。
这很有趣的主要原因当然是因为如果为真,那么接受表中pg_timezone_names存储的名称或缩写的时区的 PostgreSQL只存储 UTC 偏移量,从而丢失 DST 信息。
意思是,为了使实际时区名称(如表中定义的pg_timezone_names)将来可供读者使用,它必须与旁边的timestamp with timezone列显式存储在一起。
我现在感兴趣的主要原因是我想到了一种相当聪明的渲染时间方式,可以记录地球上任何地方的事件时间。即如果记录的时间在用户当前时区,则将其报告为一个简单的日期/时间(没有时区信息),并且只有当它在与读者不同的时区中时,才报告时区信息(即使如此,时区名称可能比 UTC 偏移量更用户友好)。
如果我希望在网站上实现这种上下文敏感的渲染,看起来我将不得不在我的事件时间(以及我存储的任何其他时区感知日期/时间)旁边存储时区名称。
但是我对基于推理而非知识做出这样的承诺感到不自在,并且想要一些支持或反驳这些推理的证据。