V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
teli
V2EX  ›  PostgreSQL

第一次使用 PostgreSQL,连建表都不会,请教点经验

  •  
  •   teli · 22 天前 · 2078 次点击

    考虑 ai 时代了。为了用上 pgvector ,尝试接下来把主数据库直接换用 pg 。

    请教点经验

    1. 自增长主键,怎么设置为好?之前 mysql 都是 bitint 自增长
    2. collate 怎么选?之前 mysql 都是 utfmb4 。网上说应该 zh_CN-utf8 。docker 安装的,根本没 zh_CN-utf 选。好像要自己打包镜像才有。 没 3 了。建表都不会建。还有什么其它坑,还请直接相告。

    之前 mysql 时,update_time 是自动更新。postgres 好像不能自动更新,有什么好的替代方案。

    11 条回复    2024-05-26 13:28:30 +08:00
    gzlock
        1
    gzlock  
       22 天前
    用 prisma 挺容易的,就是需要多装一个 nodejs 环境
    sagaxu
        2
    sagaxu  
       22 天前
    1. bigserial
    2. 可以基于这个 docker 增加 locale 支持
    3. 触发器
    gam2046
        3
    gam2046  
       22 天前
    pg 里一般通过 serial 类型实现自增。

    至于其他建库、建表等基础操作,DDL 语句都是一样的。

    create database
    create table

    “update_time 是自动更新”不太理解含义,如果是值得记录更新时,希望 DB 自动设置某个字段,你可以使用触发器。
    ck65
        4
    ck65  
       22 天前
    tairan2006
        5
    tairan2006  
       22 天前 via Android
    ai 时代了 你这些问题都可以问 ai 的
    suuuch
        6
    suuuch  
       22 天前
    #3 说的很正确了。

    update_time 自动更新,pg 确实不支持,替代方案是放到 ORM 去实现。

    PG 的默认编码是 UTF8 的,默认 UTF8 的编码兼容性很不错,中英文直接用毫无问题。
    meiguozhiguang
        7
    meiguozhiguang  
       22 天前 via iPhone
    我也是刚用,好多不一样的,一点点摸索
    iamdlsdls
        8
    iamdlsdls  
       22 天前
    @suuuch 这么简单的需求 pg 怎么可能不支持呢,更新时间戳的值为 now() 就行了
    suuuch
        9
    suuuch  
       22 天前
    @iamdlsdls 我对这个问题的理解是像 Mysql 那样,created_time, updated_time 的操作,updated_time 可以跟随 这一行记录中的任何一个字段的数据变化而自动更新,且不需要单独指定 updated_time = now() 这样写出来。
    ysw
        10
    ysw  
       22 天前
    用 orm 吧
    teli
        11
    teli  
    OP
       21 天前
    @sagaxu
    1. 为什么不是 bigint 加 ALWAYS AS IDENTITY ?
    2. docker 可以在不构建镜像的情况下,增加 locale 吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5369 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:43 · PVG 11:43 · LAX 20:43 · JFK 23:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.