PG数据库对象及常用的操作命令

  • 用户

1、创建用户

create user 用户名 with password ‘密码’;

如果创建用户时没有设置密码即创建的命令如下:

create user 用户名;

2、删除用户

drop user 用户名

3、修改用户密码

\password 用户名;

或者

alter user 用户名 with password ‘所要修改的密码’;

4、增加/收回操作权限:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }

[, ...] | ALL [ PRIVILEGES ] }

ON { [ TABLE ] table_name [, ...]

| ALL TABLES IN SCHEMA schema_name [, ...] }

TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )

[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }

ON [ TABLE ] table_name [, ...]

TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }

ON DATABASE database_name [, ...]

TO role_specification [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }

ON SCHEMA schema_name [, ...]

TO role_specification [, ...] [ WITH GRANT OPTION ]

5、查看用户

\du

1、创建表

create table 表名;

2、删除表

drop table 表名;(这样是把整个表全部删除)

delete from 表名;(把整个表的内容全部删除)

truncate table 表名;(将表的内容全部删除)

delete from 表名 where 所要删除表的列名 = ‘所要删除的行’;(删除表中的数据)

3、更新数据

update 表名 set 需要更改的数据 where 其他条件

4、往表中添加字段

INSERT INTO films (code, title, did, date_prod, kind)VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

INSERT INTO films VALUES('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');

5、查询表的内容

select * from 表名;

6、更改一个表的定义

重命名一个表:

alter table 旧表名 rename to 新表名

重命名表中的某一列:

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name

向一个表增加一个类型为varchar的列

ALTER TABLE distributors ADD COLUMN address varchar(30);

从表中删除一列

ALTER TABLE distributors DROP COLUMN address RESTRICT;

更改两个现有列的类型

ALTER TABLE distributors

ALTER COLUMN address TYPE varchar(80),

ALTER COLUMN name TYPE varchar(100);

  • 索引
  1. 创建索引

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ]

( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )

create index 索引名称 on 表名(属性);

多字段创建索引

create index 索引名称 on 表名(属性1,属性2);

条件索引

create index 索引名称 on 表名(属性) where 条件;

创建唯一索引

CREATE UNIQUE INDEX name ON table (column [, ...]);

2、删除索引

drop index 索引名称;

4、查看索引的详细信息

查看索引的命令

\d 索引名

查看某个表的所有索引信息

select * from pg_indexes where tablename='表名';

5、索引重命名

alter index 旧名 rename to 新名;

  • 序列

1、创建序列

create sequence 序列名

select setval(‘序列名’,开始值);

创建一个自动循环的序列

create sequence 序列名minvalue 最小值 maxvalue 最大值increment 步长start 起始值cycle;

2、查看序列属性

\d 序列名

查看当前序列

select currval(‘列表名’);

查看下一个序列值

select nextval(‘列表名’);

3、修改序列

重命名:alter sequence 旧序列名 rename to 新序列名;

alter sequence 序列名increment by增量 restart with 从多少开始;

GRANT { { USAGE | SELECT | UPDATE }

[, ...] | ALL [ PRIVILEGES ] }

ON { SEQUENCE sequence_name [, ...]

| ALL SEQUENCES IN SCHEMA schema_name [, ...] }

TO role_specification [, ...] [ WITH GRANT OPTION ]

4、删除序列

drop sequence 序列名

当有字段使用PG序列时不能直接删除,需要先将表删除,再删除序列

配合insert使用:

  1. 首先创建一个自动循环序列

create sequence 序列名 minvalue 最小值maxvalue 最大值increment 1 start 1 cycle;

2、insert into 表名 values(nextval(‘序列名’) ,‘其他属性’);

  • 模式
  1. 创建模式

CREATE SCHEMA myschema;

CREATE SCHEMA schema_name AUTHORIZATION user_name;

在模式当中建立表

先创建模式后创建表

CREATE TABLE myschema.mytable (

...

);

CREATE SCHEMA hollywood;

CREATE TABLE hollywood.films (title text, release date, awards text[]);

创建模式时直接创建表

CREATE SCHEMA hollywood

CREATE TABLE films (title text, release date, awards text[])

  1. 查看

\dn

显示当前搜索路径

SHOW search_path;

将新模式放入路径当中

SET search_path TO myschema,public;

为搜索路径设置指定的模式

SET search_path TO myschema;

  1. 修改模式的属主/名字

ALTER SCHEMA name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }

ALTER SCHEMA name RENAME TO new_name

  1. 收回模式创建表的权限

REVOKE CREATE ON SCHEMA public FROM PUBLIC

public 代表的是模式名 PUBLIC代表的是用户名

  1. 删除模式

drop schema 模式名;

将模式mystuff下的所有链表全部删除

DROP SCHEMA mystuff CASCADE;

  • 函数

1、创建函数

CREATE [ OR REPLACE ] FUNCTION

name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )

[ RETURNS rettype

| RETURNS TABLE ( column_name column_type [, ...] ) ]

{ LANGUAGE lang_name

| TRANSFORM { FOR TYPE type_name } [, ... ]

| WINDOW

| IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF

| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT

| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER

| PARALLEL { UNSAFE | RESTRICTED | SAFE }

| COST execution_cost

| ROWS result_rows

| SET configuration_parameter { TO value | = value | FROM CURRENT }

| AS 'definition'

| AS 'obj_file', 'link_symbol'

} ...

例子:

create function add(int,int,int)

returns int as 'select $1 + $2 + $3;'

language sql

immutable returns null on null input;

name

要创建的函数名字(可以用模式修饰)。

argmode

参数的模式:是 IN、OUT、或者 INOUT。 如果省略,缺省是IN。

argname

一个参数的名字。有些语言(目前只有PL/pgSQL)允许你在函数体里使用参数名字。对于其它语言,这个参数名字只是额外的文档。但是输出参数的名字是非常重要的,因为它定义了结果行类型的字段名。(如果你省略了一个输出参数的参数名,那么系统会选取缺省的字段名。)

argtype

该函数的数据类型(可以有模式修饰)。如果有的话,参数类型可以是基本类型,也可以是复合类型,域类型,或者可以引用一个现有字段相同的类型。

根据实现语言的不同,我们还可以在这上面声明 "伪类型", 比如cstring。伪类型表示实际的参数类型要么是没有完整地声明,要么是在普通的 SQL数据类型之外。

一个字段的类型是用 tablename.columnname%TYPE表示的;使用这个东西可以帮助函数独立于表定义的修改。

rettype

返回数据类型。输出类型可以声明为一个基本类型,复合类型,域类型,或者引用一个表的现有字段。根据实现语言的不同,我们还可以在这上面声明"伪类型", 比如 cstring。

如果存在 OUT 或者 INOUT 参数,则可以省略 RETURNS子句。如果出现了,那么它必须和输出参数隐含的结果类型兼容:如果有多个输出参数,必须是

RECORD, 如果只有一个输出参数,则与其相同。

SETOF 修饰词表示该函数将返回一套条目, 而不是一条条目。

一个字段的类型是通过写 tablename.columnname%TYPE 来引用的。

langname

用以实现函数的语言的名字。 可以是 SQL,C, internal,或者是用户定义的过程语言名字。为了保持向下兼容,该名字可以用单引号包围。

IMMUTABLESTABLEVOLATILE

这些属性告诉系统把对该函数的多次调用替换成一次是否安全。 主要用于运行时优化。至少应该声明一个选择。如果任何一个都没有出现,那么VOLATILE 是缺省假设。

IMMUTABLE表示该函数在给出同样的参数值时总是返回相同的结果;也就是说,它不做数据库查找或者是使用那些并没有直接出现在其参数列表里面的信息。如果给出这个选项,那么任何带着全部是常量参数对该函数的调用都将立即替换为该函数的值。

STABLE表示在一次表扫描里,对相同参数值,该函数将稳定返回相同的值,但是它的结果可能在不同 SQL语句之间变化。这个选项对那些结果倚赖数据库查找,参数变量(比如当前时区),等等的函数是很合适的。 还要注意

current_timestamp 族函数是 stable(稳定)的,因为它们的值在一次事务中不会变化。

VOLATILE表示该函数值甚至可以在一次表扫描内改变,因此不会做任何优化。很少数据库函数在这个概念上是易变的; 一些例子是 random(),currval(),timeofday()。请注意任何有副作用的函数都必需列为易变类,即使其结果相当有规律也应该这样,这样才能避免它被优化;一个例子就是setval()。

CALLED ON NULL INPUTRETURNS NULL ON NULL INPUTSTRICT

CALLED ON NULL INPUT(缺省)表明该函数在自己的某些参数是空值的时候还是可以按照正常的方式调用。剩下的事情是函数的作者必须负责检查空值以及相应地做出反应。

RETURNS NULL ON NULL INPUT 或 STRICT 表明如果它的任何参数是 NULL,此函数总是返回 NULL。如果声明了这个参数,则如果存在NULL 参数时不会执行该函数; 而只是自动假设一个 NULL 结果。

[EXTERNAL] SECURITY INVOKER[EXTERNAL] SECURITY DEFINER

SECURITY INVOKER表明该函数将带着调用它的用户的权限执行。这是缺省。SECURITY DEFINER声明该函数将以创建它的用户的权限执行。

关键字 EXTERNAL 的目的是和 SQL兼容,但是它是可选的,因为这个特性适合于所有函数,而不仅仅外部函数。

definition

一个定义函数的字串常量;含义取决于语言。它可以是一个内部函数名字, 一个指向某个目标文件的路径,一个 SQL查询,或者一个用过程语言写的文本。

obj_file, link_symbol

这个形式的 AS 子句用于在函数的 C 源文件里的函数名字和 SQL函数的名字不同的时候可动态装载 C 语言函数。 字串 obj_file 是包含可动态装载的对象的文件名,而

link_symbol 是函数的链接符号,也就是该函数在 C源文件里的名字。如果省略了链接符号,那么就假设它和被定义的 SQL 函数同名。

attribute

历史遗留的函数可选信息。下面的属性可以在此出现:

isStrict

等效于 STRICT 或者 RETURNS NULL ON NULL INPUT

isCachable

isCachable 是 IMMUTABLE 的过时的等效物;不过出于向下兼容,我们仍然接受它。

2、修改函数

ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )

RENAME TO new_name

ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )

OWNER TO new_owner

ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )

SET SCHEMA new_schema

name

一个现有的函数的名字(可以有模式修饰)。

argmode

函数参数的模式:IN,OUT,INOUT或VARIADIC。如果不指定该参数,默认为IN。注意,ALTER FUNCTION 实际上不会处理OUT模式的参数,因为只有输入参数才会作为函数签名的一部分来标识函数实体。因此,列出IN,INOUT,VARIDIC模式就足够了。

argname

函数参数的名字。注意,ALTER FUNCTION 实际上不会处理参数名字,因为只有参数的数据类型才会作为函数的签名的一部分来标识函数实体。

argtype

函数参数的数据类型,如果有模式的话可以使用模式进行修饰。

new_name

函数的新名字

new_owner

函数的新所有者。请注意如果函数标记为 SECURITY DEFINER,那么它随后将以新的所有者执行。

new_schema

函数的新模式。

  1. 运行函数

select functionname() as answer;

  1. 删除函数

DROP FUNCTION sqrt(integer);

在一个命令中删除多个函数

DROP FUNCTION sqrt(integer), sqrt(bigint);

  • 存储过程
  1. 创建

CREATE [ OR REPLACE ] PROCEDURE

name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )

{ LANGUAGE lang_name

| TRANSFORM { FOR TYPE type_name } [, ... ]

| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER

| SET configuration_parameter { TO value | = value | FROM CURRENT }

| AS 'definition'

| AS 'obj_file', 'link_symbol'

} ...

create procedure 过程名(定义数据类型)

language sql

as $$ 所要进行的操作;

$$;

  1. 运行

call 过程名();

  1. 更改

ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]

RENAME TO new_name

ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]

OWNER TO { new_owner | CURRENT_USER | SESSION_USER }

ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]

SET SCHEMA new_schema

  1. 删除

DROP PROCEDURE [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...]

[ CASCADE | RESTRICT ]

  1. 查看存储过程的创建语句

select pg_proc.proname, prosrc  from pg_proc where proname = 'sc1.del(integer)';

PG数据库对象及常用的操作命令相关推荐

  1. PG数据库对象及常用操作命令使用介绍

    目录 user: table: index: sequence: view: pg操作命令: 数据对象使用介绍: user: 创建用户: create user test with password ...

  2. 入侵oracle数据库时常用的操作命令整理

    首 页  系统问题系  图像网站系  办公应用系  编程开发系  数字艺术系  学院图酷  [ 视频中心  看精美图片  专题集锦  学院周刊 ] 操作系统 | 工具软件 | 病毒安全 | 多媒体 | ...

  3. Oracle事务和常用数据库对象

    1.事务:有一组命令组成的逻辑单元,保证所有操作要么全部成功要么全部失败. 以下情况事务结束:1)显式提交(commit) 2)显式回滚(rollback) 3)ddl语句隐身提交 4)正常结束程序提 ...

  4. MySQL数据库常用的操作命令(一)

    一.数据库常用操作 1.DOS窗口访问数据库: mysql -u+用户名 -p+密码 2.创建库: create database +库名 ; 3.删除数据库: drop database +库名; ...

  5. SQL 审核:基于PG数据库插件hook的SQL规范审核工具

    关注"数据和云",精彩不容错过 内容来源:2017 年 10 月 21 日,平安科技数据库架构师陈刚在"PostgreSQL 2017中国技术大会"进行< ...

  6. DTS 及其在PG 数据库生态中的应用

    目录 一.PostgreSQL 数据传输通道关键技术 (一)什么是数据传输通道? (二)PostgreSQL 内置数据类型 (三)PostgreSQL 分区表 (四)PostgreSQL 增量数据获取 ...

  7. 如何看pg数据库版本号_查看pg数据库版本

    PostgreSQL 基本命令 链接:http://blog.itpub.net/28602568/viewspace-1841163/ 标题:PostgreSQL 基本命令 作者:lōττéry©版 ...

  8. 数据库对象 同义词 索引 序列 视图

    1. Oracle数据库对象 数据库对象是数据库的组成部分,常常用CREATE命令进行创建,可以使用ALTER命令修改,用DROP执行删除操作.前面已经接触过的数据库对象有表.用户等. 今天将学习更多 ...

  9. 再过五分钟,你就懂Oracle的数据库对象了

    数据库的功能就是组织管理和存储各种数据库对象.数据库中的对象是我们进行数据管理的基本.本篇会回顾一下数据库对象的一些基本知识,让我们更加清晰的了解这些Oracle数据库对象. 1. 表(Table) ...

最新文章

  1. Git Flow—Git团队协作最佳实践
  2. Java基础-我所理解的泛型
  3. mysql无法创建存储过程问题 ERROR 1307 (HY000)
  4. Python 的电子邮件编程
  5. 解决Eclipse中文乱码
  6. uva 10801 Lift Hopping
  7. oracle表设置主键自增长,笔记:oracle表设置主键自增长
  8. 表格过滤器_气缸选型其实并不复杂,知道这些再也不怕选错气缸(附计算表格)...
  9. 判断一个字符串是否另一个字符串的右移后的
  10. angular html清除元素,在Angular js中单击时删除HTML元素
  11. XML学习(二)————属性还是标签?
  12. 基于java SSM springboot动物检疫信息管理系统设计和实现
  13. java输出变量_Java笔记1: 输入输出与变量常量
  14. 【前端】如何实现一个简单地可折叠展开右侧悬浮工具栏?
  15. java 代码段 执行超时 抛异常_深入理解Java线程状态
  16. 中职计算机教师考核工作总结,中职计算机教师教学工作总结
  17. Kanzi学习之路(4):Kanzi的属性系统
  18. ETL为什么经常变成ELT甚至LET?
  19. 函数的单调性和曲线的凹凸性
  20. html块级元素有哪些

热门文章

  1. MySQL修改密码的3种方式< MySQL忘记root密码后如何重置?
  2. linux基础学习——linux的文件权限和目录配置
  3. Android Apk瘦身指南大全
  4. java overdata_使用try-catch over条件来安全地设置值,并在java中以最小的性能影响...
  5. 最近收集的一些图片(第2期)
  6. java跳出for循环_Java跳出多层for循环的4种方式
  7. 马航飞机失踪最新消息
  8. CAD中如何倒圆角、斜角?
  9. linux系统有哪些电脑,低配电脑装linux系统好吗,或者有什么别的系统推荐吗?...
  10. 12306显示无票 报名旅行团成功取票【转载】