PostgreSQL标准建表语句

本文详细介绍了一个用户表的数据库设计,包括字段说明、主键、索引和权限分配策略。通过具体SQL语句展示了如何创建用户表,设置字段属性,如姓名、性别、年龄等,并实现对不同角色的细粒度权限控制。
-- 建表
CREATE TABLE if not exists public.user
(
  id character varying(32) NOT NULL DEFAULT sys_guid(),
  name character varying(100) NOT NULL,
  gender character varying(50) NOT NULL,
  age character varying(10) NOT NULL,
  id_no character varying(50) NOT NULL,
  created_date timestamp without time zone DEFAULT now(),
  created_by character varying(100) DEFAULT 'system',
  updated_date timestamp without time zone DEFAULT now(),
  update_by character varying(100) DEFAULT 'system',
  CONSTRAINT user_pkey PRIMARY KEY (id)
)with (oids = false);

-- 注释
COMMENT ON TABLE public.user IS '用户表';
COMMENT ON COLUMN public.user.id IS '主键';
COMMENT ON COLUMN public.user.name IS '姓名';
COMMENT ON COLUMN public.user.gender IS '性别';
COMMENT ON COLUMN public.user.age IS '年龄';
COMMENT ON COLUMN public.user.id_no IS '身份证号';
COMMENT ON COLUMN public.user.created_date IS '创建时间';
COMMENT ON COLUMN public.user.created_by IS '创建人';
COMMENT ON COLUMN public.user.updated_date IS '更新时间';
COMMENT ON COLUMN public.user.update_by IS '更新人';

-- 主键 (如果建表语句里面没添加主键就执行该语句)
alter table public.user
  add constraint user_pkey primary key (id);

-- 索引或唯一索引
drop index if exists user_name;
CREATE INDEX user_name ON user (name);

drop index if exists user_id_no;
CREATE  UNIQUE INDEX user_id_no ON user (id_no);

-- 授权
GRANT ALL ON TABLE public.user TO mydata;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.user TO mydata_dml;
GRANT SELECT ON TABLE public.user TO mydata_qry;

 

### 如何在 PostgreSQL 中查看表语PostgreSQL 中,可以通过 `\d` 或 `pg_dump` 工具来查看已创结构及其对应的表语。 #### 使用 psql 的元命令 通过 PostgreSQL 提供的交互式终端工具 `psql`,可以使用以下命令查看定义: - **`\d tablename`**: 显示指定的基本信息,包括列名、数据类型、约束条件等[^2]。 - 如果需要更详细的输出,例如索引、触发器和其他对象的信息,则可以使用 **`\d+ tablename`**。 此方法适用于快速浏览的设计细节,但它不会直接提供完整的 SQL 创语句。 #### 使用 pg_dump 导出表语 如果希望获取原始的表语(CREATE TABLE),则可以借助 `pg_dump` 实用程序完成这一操作。以下是具体实现方式: ```bash pg_dump -t tablename --schema-only database_name ``` 上述命令会导出目标数据库中特定 (`tablename`) 的模式部分(即不包含任何数据)。这通常用于迁移或备份目的,并能精确还原原生的逻辑[^3]。 另外,在某些情况下可能还需要额外处理字段属性或者注释等内容;此时可利用自定义函数辅助生成最终版本的 DDL 代码片段[^4]。 ### 示例代码展示如何手动构带注解的DDL达形式如下所示: ```sql DO $$ DECLARE rec RECORD; BEGIN FOR rec IN SELECT column_name ,udt_name,column_default,is_nullable FROM information_schema.columns WHERE table_name='your_table' LOOP RAISE NOTICE '% % % %',quote_ident(rec.column_name),rec.udt_name,COALESCE('DEFAULT '||rec.column_default,''),CASE WHEN rec.is_nullable='NO' THEN 'NOT NULL' ELSE '' END ; END LOOP; END $$ LANGUAGE plpgsql; -- 添加单个列上的备注说明例子: SELECT gen_comment_sql('public','my_column','这是一个测试字段'); ``` 以上脚本展示了遍历现有格各要素并重新组合成近似于初始状态下的声明过程以及单独设置某项描述性的补充材料。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值