Elixir Ecto: 在Postgres中使用UUID类型的主键
发布时间:2020-12-13 16:56:58 所属栏目:百科 来源:网络整理
导读:使用UUID作为主键的目的 降低Serial类型这种自增ID线性特征,UUID作为随机生成的字符串,让ID更离散,增强系统的反爬虫能力(至少避免通过ID的线性增加来爬取内容这种最简单的爬取方式) 使用主键的是那种方式,各有优缺点,可按实际需求自行权衡 在应用程序中生成U
使用主键的是那种方式,各有优缺点,可按实际需求自行权衡
数据库方面通过调用 pgcrypto 扩展模块中的 CREATE EXTENSION pgcrypto; 生成UUID SELECT gen_random_uuid(); 作为主键使用 CREATE SCHEMA IF NOT EXISTS developerworks; CREATE TABLE developerworks.contacts ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(),name TEXT,email TEXT ); 插入测试数据 INSERT INTO developerworks.contacts (name,email) VALUES ('Dr Nic Williams','drnic'),('Brian Mattal','brian'),('Wayne E. Seguin','wayneeseguin'),('Long Nguyen','long'),('Bill Chapman','bill'),('Chris Weibel','chris'),('Jeremey Budnack','jrbudnack'),('Ruben Koster','rkoster'),('Jamie Van Dyke','jamie'),('Quintessence Anx','qanx'),('McGowan','mcg'),('高,秀娇 (XJ)','xj'),('Geoff Franks','geoff'),('Van Nguyen','vnguyen'),('John Longanecker','jlonganecker') ; 查询结果 SELECT * FROM developerworks.contacts;
迁移脚本定义defmodule Jianpan.Repo.Migrations.CreatePrefixNodes do use Ecto.Migration def change do create table(:prefix_nodes,primary_key: false) do add :id,:uuid,primary_key: true,default: fragment("gen_random_uuid()") add :order,:integer add :name,:string add :is_deleted,:boolean,default: false,null: false add :parent_id,references(:prefix_nodes,type: :uuid,on_delete: :delete_all) end create index(:prefix_nodes,[:parent_id]) end end 参考资料
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |