postgres 自动编号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgres 自动编号相关的知识,希望对你有一定的参考价值。

postgres 下如让自动编号?
我有一个表 coordinates( id(PK),latitude,longitude ) 共三个属性。
id 为编号,latitude 表示经度,longitude 表示纬度。
我要在每次插入 一个经度和一个纬度时,让表格自动生成编号id ,应该如何实现? 我用的是pgadmin 8.3
请高手指教!

参考技术A 提示说什么不能连接到postgres 数据库
错误:在Administrator这个用户的 密码验证失败!!
你最好有图形界面登录上去 才行

下面是一个例子:
希望可以帮你吧

在linux系统中创建postgres数据库- -

下面是创建数据库的例子和说明,数据库名为TestDB
1. in command line:
以postgres用户登录:
#su - postgres
2.初始化数据库:
$initdb
3.修改/var/lib/pgsql/data目录下的pg_hba.conf和postgresql.conf:
1)pg_hba.conf
将# IPv4-style local connections下面的内容换成:
# IPv4-style local connections:
host all all 127.0.0.1 255.255.255.255 trust
host all all 0.0.0.0 0.0.0.0 trust
2)postgresql.conf
将tcpip_socket 及max_connections改成:
tcpip_socket = true #采用tcpip连接的方式
max_connections = 100 #最大连结数
4.在service列表里,重新启动postgresql
5. 创建数据库TestDB,使用unicode编码
$createdb -E unicode -e TestDB
6.导入数据库表结构和数据(事先准备好sql文件output.sql)
$psql TestDB </var/lib/pgsql/data/output.sql
ok,导入完毕,然后使用pgadmin3客户端工具即可访问, 数据库名为TestDB, 用户名为postgres,密码为postgres,也可以不要密码。
如果Linux安装了防火墙,请到security level画面去禁止防火墙,以便客户端可以访问.
如果要导出表结构及数据,请使用命令:
pg_dump -d -f output.sql TestDB -h 192.168.0.1 -U postgres -P postgres
其中TestDB为数据库名称, 192.168.0.1为数据库服务器IP地址, postgres分别为数据库用户和密码
另外,如果有sql文件如output.sql需要事先从usb盘拷贝到linux,请参照如下步骤装载usb:
1.察看Linux是否已经正确安装usb驱动程序;
2.运行 fdisk -l /dev/sda 看系统是否能找到usb盘
3.创建usb目录
#mkdir /mnt/usb
4.装载usb设备
#mount -t msdos /dev/sda1 /mnt/usb
如果您的文件系统为fat32,则使用:
#mount -t vfat /dev/sda1 /mnt/usb
5.查看usb存储器中的文件:
ls /mnt/usb

postgres - 日期时间自动转换

【中文标题】postgres - 日期时间自动转换【英文标题】:postgres - date time is automatically converted 【发布时间】:2022-01-09 16:46:16 【问题描述】:

在调试模式下使用 vscode,当我将鼠标悬停在日期字段上时,它显示为下图。

但是当我注销它时,它会转换为

"execution_date":"2021-12-02T20:23:48.322Z"

这是负 7 小时。 该字段作为时间戳存储在 AWS RDS 上的 postgres 数据库中,运行 show timezone; 返回 UTC,我在 GMT+7 时间使用 VSCode。由于日期已更改并用于调用api,因此如何解决此问题,因此返回的结果将不正确。

【问题讨论】:

字段是timestamp 还是timestamp with time zone?使用psql 会为该服务器返回什么show timezone;?添加答案以更新您的问题。 @AdrianKlaver 该字段是时间戳,运行 show timezone; 返回 UTC。调试时将鼠标悬停在 execution_date 字段上时,它显示的日期和时间与存储在数据库中的日期和时间相同,但是当它被注销并用于调用 API 时,它会减少 7 小时。 您现在已经了解了如果您关心时区,为什么不应该使用timestamp。阅读Date/Datetimes 8.5.1.3。时间戳。短版您的datetime 被假定为UTC 进入。回到你的时间:select '2021-12-02T20:23:48.322Z' at time zone 'ICT'; 2021-12-03 03:23:48.322 @AdrianKlaver 但是在调试时为什么它显示的时间与存储在数据库中的时间相同,但是当注销并用于调用 API 时,它得到了负 7 小时。我认为这与我的操作系统或 VSCode 有关吗? @AdrianKlaver 抱歉,不知道为什么,但我无法编辑上述回复。在数据库中它存储为2021-12-03 03:23:48.322,文档指出the resulting value is derived from the date/time fields in the input value, and is not adjusted for time zone.,我正在使用Sequelize,并且生成的查询没有设置任何时区,所以它不应该是负7小时,这是正确的。 【参考方案1】:

这不是一个完整的答案,因为这取决于更多信息。相反,它是对正在发生的事情的解释,可以帮助您排除故障:

set TimeZone = UTC;
show timezone;
 TimeZone 
----------
 UTC
--Show that timestamp is taken at UTC
 select now();
              now              
-------------------------------
 2021-12-05 18:23:38.604681+00

--Table with timestamp and timestamptz to show different behavior.
create table dt_test(id integer, ts_fld timestamp, tsz_fld timestamptz);

--Insert local time 'ICT'
insert into dt_test values (1, '2021-12-03 03:23:48.322+07', '2021-12-03 03:23:48.322+07');

--The timestamp entry ignores the time zone offset, while the timestamptz uses it to rotate to UTC as '2021-12-03 03:23:48.322+07' is same as '2021-12-02 20:23:48.322+00'
select * from dt_test ;
 id |         ts_fld          |          tsz_fld           
----+-------------------------+----------------------------
  1 | 2021-12-03 03:23:48.322 | 2021-12-02 20:23:48.322+00


--timestamp takes the value as at 'ICT' and then rotates it to the current 'TimeZone' UTC. The timestamptz takes the value at UTC at rotates it to 'ICT'
select ts_fld AT TIME ZONE 'ICT', tsz_fld AT TIME ZONE 'ICT' from dt_test ;
          timezone          |        timezone         
----------------------------+-------------------------
 2021-12-02 20:23:48.322+00 | 2021-12-03 03:23:48.322

我猜测在获取 API 值的过程中的某个时间点,代码采用 timestamp 值并使用一些等效程序在数据库或下游应用 AT TIME ZONE 'ICT'

【讨论】:

【参考方案2】:

我发现了问题,这与Sequelize和postgres如何处理timestamp without timezone有关。如果你有和我一样的问题,请参考以下链接:https://github.com/sequelize/sequelize/issues/3000

【讨论】:

这里指出的是,如果您关心时区,您应该使用timestamptz 类型。 @AdrianKlaver 这实际上是一个已经存在的系统。谢谢,从现在开始我会更加注意时间戳。

以上是关于postgres 自动编号的主要内容,如果未能解决你的问题,请参考以下文章

pg(node-postgres)是不是自动清理数据

postgres - 日期时间自动转换

如何在超过 12 的 postgres 版本上自动生成 Oid

Postgres - 内置的自动和动态分区

postgres,使用另一个表中的数据进行批量更新

postgres 自动增量未在显式 id 插入时更新