Pgsql学习笔记
PLsql学习笔记

PL/SQL学习笔记PLSQL特有的%TYPE属性来声明与XX类型一致的变量类型:举例:...v_st_name%TYPE;v_min_balancev_balance%TYPE:= 10;...可绑定变量(Bind Variable 也称为Host Variable , 非PLSQL 变量):可绑定变量是一种在缩主环境中定义的变量,所谓缩主环境一般指示SQLPLUS执行环境或者是PLSQL Developer 的Command Window执行环境;可绑定变量可用于在运行时把值传递给PLSQL, 创建语法:V ARIABLE return_codeNUMBERV ARIABLE return_msgV ARCHAR2(30)大家注意,在标准的PLSQL中定义变量是不能用V ARIABLE关键字的,此关键字只在SQLPLUS执行环境中有效,可使用PRINT语句输出变量内容。
在PLSQL中使用这种变量时,前面加”:”, 以示区分。
SELECT INTO 语句:用于把从数据库查询出内容存入变量BEGININSERT INTO employees(employee_id, first_name, last_name, email,hire_date, job_id, salary)V ALUES(employees_seq.NEXTV AL, 'Ruth', 'Cores', 'RCORES',sysdate, 'AD_ASST', 4000);END;循环语句的语法与其他语言类似:有基本循环、For循环、Wihle循环三种LOOPstatement1;. . .EXIT [WHEN condition];END LOOP;WHILE condition LOOPstatement1;statement2;. . .END LOOP;FOR counter IN [REVERSE]lower_bound..upper_bound LOOPstatement1;statement2;. . .END LOOP;概述:PLSQL中常用的自定义类型就两种:记录类型、PLSQL内存表类型(根据表中的数据字段的简单和复杂程度又可分别实现类似于简单数组和记录数组的功能)记录类型的定义语法:TYPE type_name IS RECORD(field_declaration[, field_declaration]…);identifiertype_name;这里的field_declaration 的具体格式可以是:field_name {field_type | variable%TYPE| table.column%TYPE | table%ROWTYPE}[[NOT NULL] {:= | DEFAULT} expr]%ROWTYPE属性:在PLSQL中%ROWTYPE 表示某张表的记录类型或者是用户指定以的记录类型,使用此属性可以很方便的定义一个变量,其类型与某张表的记录或者自定义的记录类型保持一致。
old郭带你学postgresql 笔记

old郭带你学postgresql 笔记Old郭带你学PostgreSQL 笔记在当今互联网时代,数据大爆炸已经成为家常便饭。
而PostgreSQL 作为一种高可靠、可扩展的开源数据库,逐渐成为了开发者的首选。
本文将由老师Old郭带领大家来学习PostgreSQL,并记录下本人的学习笔记。
一、PostgreSQL 的安装步骤:1.官网下载PostgreSQL2.安装后检查是否配置成功3.安装好后找到"SQL shell"打开4.输入密码二、PostgreSQL 的基本使用方法1.查看数据库\l2.连接到数据库连接到数据库后可以进行一系列操作,如创建表、插入数据等操作。
3.创建数据库在连接数据库后,输入以下命令创建一个名为"test"的数据库:CREATE DATABASE test;4.创建表在数据库中首先要创建表,这是对数据进行操作的基础。
下面的列举了一些常用的数据类型:INT:整型VARCHAR:可变长度字符串CHAR:定长字符串FLOAT:浮点数DOUBLE:双精度浮点数DATE:日期TIME:时间DATETIME:日期时间CREATE TABLE table_name(column_name data_type);例如创建一张名为"Student"的表,包含"name"和"age"两个字段:CREATE TABLE Student(name VARCHAR(20),age INT);5.插入数据INSERT INTO table_name(column1,column2,...)VALUES(value1,value2,...);例如向上一步创建的名为"Student"的表中插入一条数据:INSERT INTO Student(name,age) VALUES('Tom',18);6.查询SELECT column_name1,column_name2,... FROM table_name WHERE filter_conditions;其中,filter_conditions可以是某个具体的值,也可以是某种范围。
PostgreSQL学习手册(目录)

PostgreSQL学习⼿册(⽬录)事实上之前有很长⼀段时间都在纠结是否有必要好好学习它,但是始终都没有⼀个很好的理由说服⾃⼰。
甚⾄是直到这个项⽬最终决定选⽤PostgreSQL时,我都没有真正意识到学习它的价值,当时只是想反正和其它数据库差不多,能⽤就⾏了。
然⽽有⼀天晚上,⾃⼰也不知道为什么,躺在床上开始回想整个项⽬的实施过程,想着想着就想到了数据库选型这⼀问题上了。
事情是这样的,最初客户将他们的产品⽬标定位为主打中型规模,同时也要在⼀定程度上⽀持⼩型规模。
鉴于此,我们为他们提供的⽅案是中型规模的数据库选⽤Oracle,⼩型规模的选定MySQL,在经过多轮商谈之后这个⽅案通过了。
然⽽随着项⽬的深⼊,客户突然有⼀天提出,由于成本和市场推⼴等问题,该产品的数据库部分需要进⾏⼀定的调整,调整的结果是中型规模可以同时⽀持Oracle和MySQL,⽽⼩型规模则要同时⽀持MySQL和PostgreSQL,原因⾮常简单,PostgreSQL是纯免费的数据库产品。
听到这个消息之后,我当时就⾮常恼⽕,因为当初为了保证运⾏时效率(国标),我们的数据库访问层是完全基于数据库供应商提供的原始C接⼝开发的,甚⾄都没有考虑ODBC提供的原始C接⼝,以防在转换中失去效率,或是ODBC本⾝为了强调通⽤性⽽不得不牺牲某些数据库的优化特征,如批量插⼊、批量读取等。
最后的结果显⽽易见,客户就是上帝,上帝的意见就是真理,这样我们就不得不基于现有的访问层接⼝⼜重新开发了⼀套⽀持PostgreSQL原⽣C接⼝的驱动。
然⽽随着对PostgreSQL的不断学习,对它的了解也在逐步加深,后来发现它的功能还是⾮常强⼤的,特别是对GIS空间数据的⽀持就更加的吸引我了。
于是就在脑⼦⾥为MySQL和PostgreSQL做了⼀个简单的对⽐和分析,最后得出⼀个结论,相⽐MySQL,PostgreSQL并没有什么刚性的缺点,但是它的纯免费特征确实是MySQL⽆法⽐拟的。
Oracle深度学习笔记内存架构之PGASQLWork区

5.Oracle深度学习笔记——内存架构之PGA SQL Work 区
SQL工作区域是用于内存密集型操作的从PGA内存分配的。
例如排序操作,会使用排序区域来排序一组行。
同样,哈希连接操作使用哈希区域来从左边输入来建立哈希表。
此外,bitmap merge使用位图合并区域来从合并多个位图索引中获取的数据。
如果,操作的数据综合不能放到工作区域,那么ORACLE会把输入的数据劈成更小的片。
当然,多余的会先放到临时磁盘空间,后续处理。
当自动PGA内存管理使能的时候,数据库自动调整工作区域大小。
通常,大的工作区域可能明显提升操作性能,当然代价是消耗很多的内存。
最好的是,工作区域大小足浴容纳输入的数据和相关SQL操作需要的辅助内存结构。
如果不够大,输入的数据将会被放到磁盘上,那么响应时间就会增大。
在极端CASE下,如果工作区域和输入的数据相比实在太小,数据库必须多次将数据分片,大大增加响应时间。
PGA在专有服务器和共享服务器模式下的分配区别如下图1:。
Pgsql学习笔记

Pgsql学习笔记1、PGSQL自动递增序列的做法首先,在声明该列时用SERIAL类型,然后用setval(‘序列发生器’,递增的初始值)函数设置列的初始值,其中‘序列发生器’可以在表建好后,在系统生成的有关该表的SQL脚本中找到。
其次,在使用时只要调用nextval(‘序列发生器名称’)就可以了。
2、数组构造器,用关键字ARRAY。
行构造器,用关键字row()主要用途可以用在判断某字段是否为空。
3、类型转换的两种方式:CAST ( expression AS type )或expression::type,其expression为需要转换的表达式、type为要转为的类型。
4、可以用以下语句来重命名一个表或者字段重命名一字段:ALTER TABLE 表名 RENAME 字段名 TO 新的字段名重命名表名:ALTER TABLE 表名 RENAME TO 新的表名5、类型 decimal 和 numeric 是等效的。
常用的整型为integer,6、PGSQL实现取第一调记录的方法是在SQL语句后面加上limit 1 。
7、HAVING字句的作用是:当分组后需要加上条件是用HAVING不能用WHERE,而且HAVING子句中可以包含聚合函数。
WHERE 和 HAVING 的基本区别如下: WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算),而 HAVING 在分组和聚集之后选取分组的行。
因此,WHERE 子句不能包含聚集函数;因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。
相反,HAVING 子句总是包含聚集函数。
(严格说来,你可以写不使用聚集的 HAVING 子句,但这样做很少有用。
同样的条件可以更有效地用于 WHERE 阶段。
)8、随机查询一个表中的一条记录的的语句SELECT column FROM table ORDER BY RANDOM() LIMIT 19、PGSQL中几种字符串类型的比较:类型内部名称说明VARCHAR(n) varchar 指定了最大长度,变长字符串,不足定义长度的部分不补齐CHAR(n) bpchar 定长字符串,实际数据不足定义长度时,以空格补齐TEXT text 没有特别的上限限制(仅受行的最大长度限制)BYTEA bytea 变长字节序列(使用NULL也是允许的)"char" char 一个字符由上表可以看出,一般情况下为了避免空格带来的麻烦可以选用VARCHAR(n)这种方式来申明一个字符串10.创建序列号CREATE TABLE person (id SERIAL, --实际上PGSQL是通过SERIAL这种数据类型来实现序列号功能的name TEXT);11、在触发器中有两种对象:NEW和OLD(对于INSERT 和UPDATE 触发器而言,是NEW 行,对于DELETE 触发器而言,是OLD 行)12、触发器实例首先建立一个posts表CREATE TABLE posts(id serial NOT NULL,title character varying(50),body text,created timestamp with time zone DEFAULT now(),modified timestamp with time zone DEFAULT now())WITHOUT OIDS;ALTER TABLE posts OWNER TO postgres;建立触发器函数-- Function: posts_insert()-- DROP FUNCTION posts_insert();CREATE OR REPLACE FUNCTION posts_insert()RETURNS "trigger" AS$BODY$beginif(NEW.title <> 'aaaa')thenNEW.body='ce shi chu fa';end if;return NEW;end$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION posts_insert() OWNER TO postgres;建立触发器CREATE TRIGGER p_b_insertBEFORE INSERTON postsFOR EACH ROWEXECUTE PROCEDURE posts_insert();13、PGSQL中存在事务的保存点SAVEPOINT,当在事务中设置了保存点,一旦发生错误我们不用回滚到事务的开始,用ROLLBACK TO可以直接回滚到指定的保存点。
PGSQL存储过程学习

PGSQL存储过程学习⼀、存储过程定义:存储过程(Stored Procedure)是在⼤型中,⼀组为了完成特定功能的SQL 语句集,它存储在数据库中,⼀次后永久有效,⽤户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执⾏它。
存储过程是数据库中的⼀个重要对象。
在数据量特别庞⼤的情况下利⽤存储过程能达到倍速的效率提升。
⼆、存储过程的结构 案例: 创建⼀个求长⽅形⾯积的存储过程。
create or replace function area_of_rectangle(lenth integer,height integer) --存储过程名称与参数【参数格式:(变量名1 变量类型 , 变量名2 变量类型,…)returns integer as --有“s”$$declare --declare表⽰声明变量,可以声明多个变量area integer := 0; --定义⾯积变量数据类型beginarea := lenth * height; --主逻辑与返回值return area; --返回值end $$ language 'plpgsql';注意:两个 $$ 符中间可以填⼊符合命名规则的任意字符,如$body$、$aaaa$。
但是下⽅的美元符必须与这⾥的保持⼀致。
调⽤存储过程:⼆、变量使⽤1.变量类型:存储过程中,对变量赋值需要两个值类型⼀致;注意:record类型变量是“记录类型”的变量,⽤于存储多⾏多列的值。
按官⽅⽂档的说明,record类型的变量并不是真正的变量,该类型变量在第⼀次赋值前,它有多少列、每⼀列是什么类型都是不确定的。
在第⼀次赋值后,该变量就根据值⾃动确定列的数量和各列的类型。
三、赋值 3.1、静态赋值: student_name := '张静'; 3.2、动态赋值: select name into student_name from class where stu_No = 1; --或者 execute 'select name from class where stu_No = 1' into student_name;四、基本流程语句:存储过程中,使⽤RAISE NOTICE可以在运⾏时将变量输出显⽰4.1、if语句IF ... THEN ... END IF;IF ... THEN ... ELSE ... END IF;IF ... THEN ... ELSE ... THEN ... ELSE ... END IF;--例:if student_name = '张静' thenRAISE NOTICE '我是张静';else if student_name like '%李%' thenRAISE NOTICE '我姓李';elseRAISE NOTICE '我不是张静,也不姓李';4.2、case语句CASE ... WHEN ... THEN ... ELSE ... END CASE;CASE WHEN ... THEN ... ELSE ... END CASE;--例:case student_name when '张静','晓静' thenRAISE NOTICE '张静和晓静都是我的名称';elseRAISE NOTICE '你叫错名字了';end case;--例:case when student_name = '张静'or student_name = '晓静' thenRAISE NOTICE '张静和晓静都是我的名称';elseRAISE NOTICE '你叫错名字了';end case;4.3、循环[ <<label>> ]LOOP循环体语句;EXIT [ label ] [ WHEN 判断条件表达式 ];END LOOP [ label ];--例-计算1到100的和:sum := 0;i := 0;loopi := i + 1;sum := sum + i;exit when i = 100 ;end loop;RAISE NOTOCE '1到100的和为:%',sum;[ <<label>> ]WHILE 判断条件表达式 LOOP循环体语句;END LOOP [ label ];--例 - 计算1到100的和:sum := 0;i := 1;while i<=100 loopsum := sum + i;i := i + 1;end loopRAISE NOTOCE '1到100的和为:%',sum;[ <<label>> ]FOR 循环控制变量 IN [ REVERSE ] 循环范围 [ BY expression ] LOOP循环体语句;END LOOP [ label ];--计算1到100的和:--例1 - 循环执⾏过程类似于:for(i=1;i<=100;i++){}sum := 0;for i in 1..100 loopsum := sum + i;end loop;RAISE NOTOCE '1到100的和为:%',sum;--例2 - 循环执⾏过程类似于:for(i=100;i>=1;i--){}sum := 0;for i in REVERSE 100..1 loopsum := sum + i;end loop;RAISE NOTOCE '1到100的和为:%',sum;--计算1到100之间所有奇数的和--例3 - 循环执⾏过程类似于:for(i=1;i<=100;i=i+2){}sum := 0;for i in 1..100 by 2 loopsum := sum + i;end loop;RAISE NOTOCE '1到100的和为:%',sum;[ <<label>> ]FOR 变量 IN 查询语句 LOOP循环体语句;END LOOP [ label ];--例 - 遍历班级中每个⼈的名字:for student_name in select name from class loopRAISE NOTICE '姓名:%',student_name;end loop;四、查询并返回多条记录案例1:create or replace function f_get_member_info(id integer)returns setof record as --setof是关键字,暂时不清楚其作⽤;record是返回的数据类型,即记录类型数据;$$ --两个美元符必须存在,中间可以填⼊符合命名规则的字符(如$body$,$abc$),但必须与下⽅的两个美元符相统⼀declarerec record; --定义记录类型的变量,⽤于存储查询的结果begin--开始for循环,执⾏SELECT语句。
pgsql基础语法

pgsql基础语法在数据库领域中,pgsql是一种常用的关系型数据库管理系统。
掌握pgsql的基础语法是学习和使用该系统的前提条件。
本文将介绍pgsql的基础语法,包括创建数据库、创建表、插入数据、查询数据、更新数据和删除数据等操作。
一、创建数据库要创建数据库,可以使用CREATE DATABASE语句,语法如下:CREATE DATABASE database_name;其中,database_name是要创建的数据库的名称。
例如,要创建一个名为mydb的数据库,可以执行以下语句:CREATE DATABASE mydb;二、创建表在创建数据库之后,可以创建表来存储数据。
要创建表,可以使用CREATE TABLE语句,语法如下:CREATE TABLE table_name (column1 datatype,column2 datatype,column3 datatype,...);其中,table_name是要创建的表的名称,column1、column2等是表的列名,datatype是列的数据类型。
例如,要创建一个名为mytable的表,该表包含id、name和age三个列,可以执行以下语句:CREATE TABLE mytable (id serial PRIMARY KEY,name varchar(50),age integer);在上面的示例中,id列使用了serial数据类型,它是一种自增长的整数类型,并且被指定为主键。
三、插入数据在创建表之后,可以向表中插入数据。
要插入数据,可以使用INSERT INTO语句,语法如下:INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);其中,table_name是要插入数据的表的名称,column1、column2等是表的列名,value1、value2等是要插入的值。
postgresql 常用sql 语句

一、概述PostgreSQL是一种功能强大的开源关系型数据库管理系统,广泛应用于各种规模和类型的应用程序中。
在使用PostgreSQL时,熟练掌握常用的SQL语句是非常重要的,可以帮助用户更高效地管理和操作数据库。
本文将介绍PostgreSQL中常用的SQL语句,帮助读者更好地使用这一数据库管理系统。
二、连接数据库1. 连接到数据库使用以下命令可以连接到PostgreSQL数据库:```psql -U username -d database_name```其中,-U参数用于指定用户名,-d参数用于指定要连接的数据库名称。
2. 退出数据库在连接到数据库后,可以使用以下命令退出数据库:```\q```三、数据库管理1. 创建数据库使用以下命令可以在PostgreSQL中创建数据库: ```CREATE DATABASE database_name;```2. 删除数据库若要删除数据库,可以使用以下命令:```DROP DATABASE database_name;```四、表操作1. 创建表使用以下命令可以在数据库中创建表:```CREATE TABLE table_name (column1 datatype,column2 datatype,column3 datatype,...);```2. 删除表若要删除表,可以使用以下命令:```DROP TABLE table_name;```五、数据操作1. 插入数据使用以下命令可以向表中插入数据:```INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);```2. 查询数据查询表中的数据可以使用以下命令:```SELECT column1, column2, ...FROM table_nameWHERE condition;```3. 更新数据若要更新表中的数据,可以使用以下命令:```UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;```4. 删除数据若要删除表中的数据,可以使用以下命令:```DELETE FROM table_nameWHERE condition;```六、数据过滤1. 按条件过滤使用WHERE子句可以对查询结果进行条件筛选,例如: ```SELECT *FROM table_nameWHERE column1 = value;```2. 模糊查询若要进行模糊查询,可以使用LIKE运算符,例如:```SELECT *FROM table_nameWHERE column1 LIKE 'value';```七、数据排序1. 升序排序若要按升序对查询结果进行排序,可以使用以下命令: ```SELECT *FROM table_nameORDER BY column1 ASC;```2. 降序排序若要按降序对查询结果进行排序,可以使用以下命令: ```SELECT *FROM table_nameORDER BY column1 DESC;```八、聚合函数1. 求和使用SUM函数可以对数据列进行求和操作,例如:```SELECT SUM(column1)FROM table_name;```2. 平均值若要计算数据列的平均值,可以使用AVG函数:```SELECT AVG(column1)FROM table_name;```3. 计数使用COUNT函数可以统计行数或满足条件的行数,例如: ```SELECT COUNT(*)FROM table_name;九、数据分组1. 分组统计若要对数据进行分组统计,可以使用GROUP BY子句,例如:```SELECT column1, COUNT(*)FROM table_nameGROUP BY column1;```2. 分组筛选若要对分组后的数据进行筛选,可以使用HAVING子句:```SELECT column1, COUNT(*)FROM table_nameGROUP BY column1HAVING COUNT(*) > 1;```十、连接表1. 内连接使用INNER JOIN可以连接两个表,并返回满足连接条件的行,例```SELECT *FROM table1INNER JOIN table2ON table1.column1 = table2.column2;```2. 左连接若要返回左表中所有行以及与其关联的右表中的行,可以使用LEFT JOIN:```SELECT *FROM table1LEFT JOIN table2ON table1.column1 = table2.column2;```十一、子查询1. 标量子查询若要返回单一值的子查询结果,可以使用标量子查询,例如:```SELECT column1,(SELECT MAX(column2) FROM table2) AS max_value FROM table1;```2. 列表子查询使用列表子查询可以返回一列多行结果,例如:```SELECT column1FROM table1WHERE column1 IN (SELECT column2 FROM table2); ```十二、索引1. 创建索引若要在表的一个或多个列上创建索引,可以使用以下命令: ```CREATE INDEX index_nameON table_name (column1, column2, ...);```2. 删除索引若要删除索引,可以使用以下命令:```DROP INDEX index_name;```十三、事务管理1. 开始事务使用以下命令可以开始一个事务:```BEGIN;```2. 提交事务若要将未提交的事务更改保存到数据库中,可以使用以下命令: ```COMMIT;```3. 回滚事务若要撤销未提交的事务更改,可以使用以下命令:```ROLLBACK;```十四、权限管理1. 授权若要授予用户对数据库或表的特定操作许可,可以使用GRANT命令:```GRANT permissionON object_nameTO user_name;```2. 撤销权限若要撤销用户对数据库或表的特定操作许可,可以使用REVOKE命令:```REVOKE permissionON object_nameFROM user_name;```3. 角色管理使用CREATE ROLE命令可以创建新角色,使用ALTER ROLE命令可以修改角色,使用DROP ROLE命令可以删除角色。
PostgreSQL数据库学习手册之日期时间支持

PostgreSQL数据库学习手册之日期/时间支持PostgreSQL 使用一个内部的启发式分析器用于所有的日期/时间支持.日期和时间都是以字串形式输入的,然后用一个初步的判断分解为在该数域里能有什么样的信息.每个数域都被解释,并且要么是被赋予一个数字值,要么是忽略,要么是被拒绝.分析器里包含内部的查询表,用于所有文本域,包括月份,星期几,和时区.这份附录包含这些查询表的信息,及描述了分析器用来对时间和日期解码的步骤.A.1. 日期/时间输入解析日期/时间类型都是使用一套通用的过程进行解析的。
日期/时间输入解析1.把输入字串分解为一个个记号,然后把每个记号分成字串,时间,时区,或数字几类。
1.如果一个数字记号包含一个冒号(:),那么这是个时间字串。
包括随后所有的数据位和冒号。
2.如果这个数字记号包含一个划线(-),斜杠(/),或两个或多个点(.),那么他就是个日期字串,可能有一个文本月份。
3.如果这个记号只是数字,那么他要么是个独立的字段,要么是个ISO 8601 连接的日期(比如,19990113 是1999 年一月13 日)或是连接的时间(比如,141516 是14:15:16)。
4.如果记号以一个加号(+)开头或减号(-)开头,那么他要么是个时区,要么就是个特别的字段。
2.如果记号是个文本字串,那么和可能的字串进行匹配。
1.做一次二分表查找,看看这个记号是特别字串(比如,today),日期(比如,Thursday),月份(比如,January),还是个无关痛痒的字(比如,at,on)。
为字段设置数值和位掩码。
比如,为today 设置年,月,日,及为now 这样的还需要设置另外的时,分,秒。
2.如果没有找到,则做一次类似的二分表搜索,找和记号匹配的时区。
3.如果还没有找到,抛出一个错误。
3.记号是个数字或数字字段。
1.如果超过4位数字,而且前面也没有读到其他日期字段,那么就解释成一个"连接的日期"(比如,19990118)。
PGSQL存储过程学习

PGSQL存储过程学习
PostgreSQL是现在被用来建立web应用程序的非常流行的开源数据库。
PostgreSQL具有高可扩展性、可靠性、安全性和全面的SQL支持,可以帮助开发人员编写出高效的数据库应用程序。
此外,它还具有一系列的开发功能,比如存储过程。
存储过程可以帮助开发人员解决一些难以实现的功能,这些功能可以在表中不断重复,从而提高程序的性能。
存储过程有两种:内联和外联。
内联存储过程是指SQL语句被包含在查询中,并在每次查询时运行。
外联存储过程是指建立在数据库结构上的一组特定指令,它们耦合在一起以执行一定的任务。
它们可以通过SQL操作和程序来调用。
存储过程用于加快SQL查询的执行速度,可以处理复杂的计算,也可以用于定制数据库应用。
PostgreSQL的存储过程可以用PL/pgSQL编写。
PL/pgSQL是一种嵌入式的语言,可以用来编写数据库存储过程,包括基本的数据运算,循环和判断。
它可以与SQL语句结合使用,可以在带有结果集的函数中使用。
要创建一个存储过程,首先要创建一个函数。
函数的定义有四部分,即函数名、形参定义、函数体和返回类型。
函数名用于标识函数,在函数体中,可以定义变量、定义循环和条件语句,定义操作,并且还可以调用数据库函数和结构。
postgreSQL最全语法整理(可作为工具查询使用)

postgreSQL最全语法整理(可作为工具查询使用)PostgreSQL 最全语法整理一、建库语句1、创建数据库CREATEDATABASE数据库名;2、修改数据库ALTERDATABASE数据库名OWNERTO新的用户;3、删除数据库DROPDATABASE数据库名;二、表操作1、创建表CREATETABLE表名字段1字段类型[NOTNULL,NULL][DEFAULT默认值][PRIMARYKEY值],字段2字段类型[NOTNULL,NULL][DEFAULT默认值][PRIMARYKEY值], ....2、修改表ALTERTABLE表名{ADD字段名字段类型[NOTNULL,NULL][DEFAULT默认值][PRIMARYKEY值],DROP字段名,ALTER字段名{TYPE字段类型,SETNOTNULL,DROPNOTNULL,SETDEFAULT默认值,DROPDEFAULT,SETPRIMARYKEY,DROPPRIMARYKEY}};3、查看表结构DESCRIBE表名4、添加索引CREATE[UNIQUE]INDEX索引名ON表名(字段名[,字段名]...);5、删除索引DROPINDEX索引名三、数据操作1、数据插入INSERTINTO表名(字段名[,字段名]...)VALUES(值[,值]...);2、数据查询SELECT字段名[,字段名]...FROM表名[WHERE条件][ORDERBY字段名[ASC,DESC]][LIMIT起始行,取几行];3、数据更新UPDATE表名SET字段名=值[,字段名=值]...[WHERE条件];4、数据删除DELETEFROM表名[WHERE条件];四、视图操作1、创建视图CREATEVIEW视图名ASSELECT字段名[,字段名]...FROM表名[WHERE 条件][ORDERBY字段名[ASC,DESC]][LIMIT起始行,取几行];2、查看视图SELECT字段名[,字段名]...FROM视图名[WHERE条件][ORDERBY字段名[ASC,DESC]][LIMIT起始行,取几行];。
old郭带你学postgresql 笔记

old郭带你学PostgreSQL 笔记一、什么是PostgreSQL1.1 PostgreSQL的定义PostgreSQL(简称为Postgres)是一种免费且开源的关系型数据库管理系统(RDBMS)。
它是一种功能强大、可靠性高且可扩展的数据库系统。
1.2 PostgreSQL的特点•可扩展性:PostgreSQL支持水平和垂直的可扩展性,可满足不同规模和需求的应用。
•高可用性:PostgreSQL提供了多种高可用性的机制,如流复制、逻辑复制和故障切换等。
•多版本并发控制(MVCC):PostgreSQL使用MVCC来处理并发数据访问,提高了数据库的性能和并发能力。
•多种数据类型:PostgreSQL支持多种数据类型,包括基础数据类型、数组、范围、JSON等。
•触发器和存储过程:PostgreSQL支持触发器和存储过程,可以在数据库中处理复杂的业务逻辑。
•完善的SQL支持:PostgreSQL支持各种SQL标准,同时还提供了许多扩展功能和特性。
二、安装和配置PostgreSQL2.1 下载与安装•在官方网站上下载适合自己操作系统的安装包。
•执行安装包并按照提示进行安装。
•在安装过程中,可以选择安装路径和其他相关组件。
2.2 配置PostgreSQL•找到PostgreSQL的配置文件(通常为postgresql.conf)。
•根据需求修改配置文件中的参数,如监听地址、端口、数据存储路径等。
•保存配置文件并重启PostgreSQL服务以使配置生效。
2.3 创建数据库•使用命令行工具或图形界面工具连接到PostgreSQL服务器。
•执行以下命令创建数据库:CREATE DATABASE database_name;•可选:创建数据库用户并授予相应权限。
三、PostgreSQL的基本操作3.1 数据库连接•打开命令行工具或图形界面工具。
•输入连接命令,例如:psql -h hostname -p port -U username -d database_name•输入密码并回车即可连接到相应的数据库。
PostgreSQL学习手册(PLpgSQL过程语言)

一、概述:PL/pgSQL函数在第一次被调用时,其函数内的源代码(文本)将被解析为二进制指令树,但是函数内的表达式和SQL命令只有在首次用到它们的时候,PL/pgSQL解释器才会为其创建一个准备好的执行规划,随后对该表达式或SQL命令的访问都将使用该规划。
如果在一个条件语句中,有部分SQL命令或表达式没有被用到,那么PL/pgSQL解释器在本次调用中将不会为其准备执行规划,这样的好处是可以有效地减少为PL/pgSQL函数里的语句生成分析和执行规划的总时间,然而缺点是某些表达式或SQL命令中的错误只有在其被执行到的时候才能发现。
由于PL/pgSQL在函数里为一个命令制定了执行计划,那么在本次会话中该计划将会被反复使用,这样做往往可以得到更好的性能,但是如果你动态修改了相关的数据库对象,那么就有可能产生问题,如: CREATE FUNCTION populate() RETURNS integer AS $$DECLARE-- 声明段BEGINPERFORM my_function();END;$$ LANGUAGE plpgsql;在调用以上函数时,PERFORM语句的执行计划将引用my_function对象的OID。
在此之后,如果你重建了my_function函数,那么populate函数将无法再找到原有my_function函数的OID。
要解决该问题,可以选择重建populate函数,或者重新登录建立新的会话,以使PostgreSQL重新编译该函数。
要想规避此类问题的发生,在重建my_function时可以使用CREATE OR REPLACE FUNCTION命令。
鉴于以上规则,在PL/pgSQL里直接出现的SQL命令必须在每次执行时均引用相同的表和字段,换句话说,不能将函数的参数用作SQL命令的表名或字段名。
如果想绕开该限制,可以考虑使用PL/pgSQL 中的EXECUTE语句动态地构造命令,由此换来的代价是每次执行时都要构造一个新的命令计划。
Postgresql 学习笔记

一、数据类型:1、数字类型1)、整数类型int2 = smallintint4 = integerint8 = bigint2)任意精度类型(decimal和muneric等同)/(Infinity,-Infinity,NaN分别表示无穷大、负无穷大和不是一个数字)numeric(6,4) 意思为带有4位小数,整数部分有2位,精度为6比例为4numeric 不指定任何精度可以存储到该类型上限的大小3)浮点数据类型real(6 位十进制数字精度) 等同于 float(n)-->n的范围是1~24double precision(15 位十进制数字精度) 等同于 float(n)-->n的范围是25~53float不指定精度默认等同于 double precision4)序号类型(不是序列)serial 和 serial4 是等效的:两个都创建 integer 字段bigserial 和 serial8 也一样,只不过它创建一个 bigint 字段2、字符类型character varying(n), varchar(n)-->变长,有长度限制character(n), char(n)-->定长,不足补空白text变长,无长度限制3、日期类型timestamp [ (p) ] [without time zone]-->包括日期和时间timestamp [ (p) ] with time zone-->日期和时间,带时区interval [ (p) ]-->时间间隔date-->只用于日期time [ (p) ] [ without time zone ]-->只用于一日内时间time [ (p) ] with time zone-->只用于一日内时间,带时区4、布尔数据类型:boolean二、约束1、检查约束CONSTRAINT CHECK(布尔exp)2、非空约束NOT NULL3、唯一约束UNIQUE,还可以这样使用:CREATE TABLE example (a integer,b integer,c integer,UNIQUE (a, c));4、主键约束PRIMARY KEY,亦可使用表约束5、外键约束FOREIGN KEY (b, c) REFERENCES other_table (c1, c2)三、ALTER语句1、增加新字段ALTER TABLE 表名 ADD COLUMN 新字段名字段类型;例:ALTER TABLE pro ADD COLUMN description text CHECK (description <> '');2、删除表中的字段:ALTER TABLE products DROP COLUMN description;*你可以通过使用 CASCADE 来授权删除任何依赖该字段的东西:ALTER TABLE products DROP COLUMN description CASCADE;3、增加约束ALTER TABLE products ADD CHECK (name <> '');ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCESproduct_groups;*要增加一个不能写成表约束的非空约束,使用下面语法:ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;4、删除约束ALTER TABLE products DROP CONSTRAINT some_name;*除了非空约束外,所有约束类型都这么用。
plsql编程学习(语法和实例)笔记

重点:序列,游标,触发器一、基本概念游标是用来循环处理查询得到的每一列数据的方法,类似于while循环,提供集合处理之外的顺序处理能力。
触发器是在对数据表进行insert delete update等操作时,强制执行的后台操作。
多用于业务逻辑检查,数据检查、生成等。
sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。
二、实例1)基本语法--最简单的语句块set serveroutput on; //用于输出显示begindbms_output.put_line('HeloWorld');end;--一个简单的PL/SQL语句块declare //声明变量,必须 v_ 开头v_name varchar2(20);beginv_name := 'myname'; //变量的赋值格式dbms_output.put_line(v_name);end;--语句块的组成declarev_num number := 0;beginv_num := 2/v_num;dbms_output.put_line(v_num);exception //如果没有这部分,当出现异常的时候,就执行过不去when others thendbms_output.put_line('error');end;--变量声明的规则1): 变量名不能够使用保留字,如from、select等2): 第一个字符必须是字母3): 变量名最多包含30个字符4): 不要与数据库的表或者列同名5): 每一行只能声明一个变量--常用变量类型1): binary_integer: 整数,主要用来计数而不是用来表示字段类型2): number: 数字类型3): char: 定长字符串4): varchar2: 变长字符串5): date: 日期6): long: 长字符串,最长2GB7): boolean: 布尔类型,可以取值为 true、false和null--变量声明,可以使用 %type 属性declarev_empno number(4);v_empno2 emp.empno%type;//表示该变量的类型和emp表中的empno字段保持一致。
PostgreSQL数据库中文学习手册

目录PostgreSQL学习手册(数据表) (4)一、表的定义: (4)PostgreSQL学习手册(模式Schema) (9)PostgreSQL学习手册(表的继承和分区) (10)一、表的继承: (10)PostgreSQL学习手册(常用数据类型) (16)一、数值类型: (16)六、数组: (22)PostgreSQL学习手册(函数和操作符<一>) (25)一、逻辑操作符: (25)四、字符串函数和操作符: (27)五、位串函数和操作符: (29)PostgreSQL学习手册(函数和操作符<二>) (30)六、模式匹配: (30)八、时间/日期函数和操作符: (33)PostgreSQL学习手册(函数和操作符<三>) (35)九、序列操作函数: (35)十二、系统信息函数: (38)PostgreSQL学习手册(索引) (42)一、索引的类型: (42)四、唯一索引: (43)PostgreSQL学习手册(事物隔离) (45)PostgreSQL学习手册(性能提升技巧) (46)一、使用EXPLAIN: (46)PostgreSQL学习手册(服务器配置) (50)一、服务器进程的启动和关闭: (50)PostgreSQL学习手册(角色和权限) (52)PostgreSQL学习手册(数据库管理) (54)一、概述: (54)PostgreSQL学习手册(数据库维护) (56)一、恢复磁盘空间: (56)二、更新规划器统计: (57)四、定期重建索引: (59)PostgreSQL学习手册(系统表) (61)一、pg_class: (61)三、pg_attrdef: (63)四、pg_authid: (64)五、pg_auth_members: (64)七、pg_tablespace: (65)十、pg_index: (67)PostgreSQL学习手册(系统视图) (68)一、pg_tables: (68)二、pg_indexes: (68)三、pg_views: (68)四、pg_user: (69)五、pg_roles: (69)六、pg_rules: (69)七、pg_settings: (70)PostgreSQL学习手册(客户端命令<一>) (70)零、口令文件: (70)PostgreSQL学习手册(客户端命令<二>) (75)七、pg_dump: (75)八、pg_restore: (77)PostgreSQL学习手册(SQL语言函数) (83)一、基本概念: (83)PostgreSQL学习手册(PL/pgSQL过程语言) (86)一、概述: (86)PostgreSQL学习手册(数据表)一、表的定义:对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。
postgresql使用游标笔记

postgresql使⽤游标笔记 游标介绍:游标是⼀种从表中检索数据并进⾏操作的灵活⼿段,游标主要⽤在服务器上,处理由客户端发送给服务端的sql语句,或是批处理、存储过程、触发器中的数据处理请求。
游标的优点在于它允许应⽤程序对查询语句select 返回的⾏结果集中每⼀⾏进⾏相同或不同的操作,⽽不是⼀次对整个结果集进⾏同⼀种操作;它还提供对基于游标位置⽽对表中数据进⾏删除或更新的能⼒。
缺点是处理⼤数据量时,效率低下,占⽤内存⼤。
⼀般来说,能使⽤其他⽅式处理数据时,最好不要使⽤游标,除⾮是当你使⽤while循环,⼦查询,临时表,表变量,⾃建函数或其他⽅式都⽆法处理某种操作的时候,再考虑使⽤游标。
游标是系统为⽤户开设的⼀个数据缓冲区,存放SQL语句的执⾏结果。
游标的⼀个常见⽤途就是保存查询结果,以便以后使⽤。
游标的结果集是由SELECT语句产⽣,如果处理过程需要重复使⽤⼀个记录集,那么创建⼀次游标⽽重复使⽤若⼲次,⽐重复查询数据库要快的多。
PostgreSQL游标可以封装查询并对其中每⼀⾏记录进⾏单独处理。
当我们想对⼤量结果集进⾏分批处理时可以使⽤游标,因为⼀次性处理可能造成内存溢出。
另外我们可以定义函数返回游标类型变量,这是函数返回⼤数据集的有效⽅式,函数调⽤者根据返回游标对结果进⾏处理。
游标使⽤顺序:声明游标 > 打开游标 > 使⽤游标 > 关闭游标。
先展⽰⼀个游标的⽰例,以下get_film_titles(integer)函数接受代表电影发⾏年份的参数。
在函数内部,我们查询所有发⾏年份等于传递给该函数的发⾏年份的电影。
我们使⽤光标在各⾏之间循环,并连接标题和标题包含ful 单词的电影发⾏年份。
CREATE OR REPLACE FUNCTION get_film_titles(p_year INTEGER)RETURNS text AS $$-- 声明游标DECLAREtitles TEXT DEFAULT'';rec_film RECORD;cur_films CURSOR(p_year INTEGER) FOR SELECT*FROM film WHERE release_year = p_year;BEGIN-- 打开游标OPEN cur_films(p_year);LOOP-- 获取记录放⼊filmFETCH cur_films INTO rec_film;-- exit when no more row to fetchEXIT WHEN NOT FOUND;-- 构建输出IF rec_film.title LIKE'%ful%'THENtitles := titles ||','|| rec_film.title ||':'|| rec_film.release_year;END IF;END LOOP;-- 关闭游标CLOSE cur_films;RETURN titles;END; $$LANGUAGE plpgsql;SELECT get_film_titles(2006);--返回结果 ,Grosse Wonderful:2006,Day Unfaithful:2006,Reap Unfaithful:2006,Unfaithful Kill:2006,Wonderful Drop:2006⼀、声明游标 PostgreSQL声明游标有两种⽅法,⼀种是使⽤特殊类型REFCURSOR声明游标变量,另⼀种是声明和查询绑定使⽤。
pgsql官方文档学习笔记

pgsql官⽅⽂档学习笔记⽬录从头开始安装本次是使⽤docker 拉取的pgsql的镜像来学习pgsql的拉取镜像docker pull postgres查看镜像:docker images启动容器docker run --name pg -e POSTGRES_PASSWORD=123456 -e POSTGRES_USER=postgres -p 5432:5432 -d postgres:latest进⼊容器docker exec -it 5ad99bf0c1d5 /bin/bash连接postgresSql 命令psql -h localhost -p 5432 -U postgres创建⾓⾊赋予权限⼀个数据库⾓⾊可以有⼀系列属性,这些属性定义他的权限,以及与客户认证系统的交互。
登陆权限CREATE ROLE root LOGIN;CREATE USER name; # 默认就有登录权限超级⽤户权限默认的超级⽤户是 postgres ,密码是 123456 ,创建与初始超级⽤户权限⼀样的⾓⾊CREATE ROLE root SUPERUSER;创建数据库的权限⽤户创建数据库也是需要权限的,拥有该权限才能创建数据库(对于超级⽤户是例外,因为他们超越所有权限检查)CREATE ROLE name CREATEDB ;创建⾓⾊权限创建⾓⾊的权限也需要赋予,拥有该权限的⾓⾊,拥有更改和删除其他⾓⾊,以及给其他成员赋予或者撤销成员关系,不过,要创建、更改、删除⼀个超级⽤户⾓⾊的成员关系,需要具有超级⽤户属性;只有CREATEROLE还不够。
CREATE ROLE name CREATEROLE启动复制权限⾓⾊要想启动流复制,必须明确给出权限CREATE ROLE name REPLICATION LOGIN创建删除数据库shell命令创建数据库$ createdb mydb -- 创建数据库删除数据库$ dropdb mydb -- 删除数据库可能的报错报错⼀createdb: command not found原因:那么就是PostgreSQL没有安装好:要么是就根本没装上、要么是搜索路径没有包含它。
SQL数据库学习笔记与心得

SQL数据库学习笔记与心得作为一种常用的数据库技术,SQL(Structured Query Language)在现代软件开发中扮演着至关重要的角色。
从存储和管理数据到实现数据操作和查询,SQL数据库承载着信息的重要职责。
本文将分享我学习中国SQL数据库的心得和笔记,以期能帮助更多的读者更好地理解和掌握这一技术。
一、SQL语句分类SQL语句一般分为数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)和事务控制语言(TCL)五种类型。
1. 数据定义语言(DDL)数据定义语言用于创建和修改数据库对象,包括创建、删除、修改、重命名表和列等。
其常用的操作包括:CREATE:用于创建表、视图、存储过程等对象。
ALTER:用于修改表结构、重命名对象等。
DROP:用于删除表、视图、存储过程等对象。
2. 数据操作语言(DML)数据操作语言用于对数据库中的数据进行操作,包括增加、修改、删除记录等。
其常用的操作包括:SELECT:用于查询数据。
INSERT:用于向表中插入数据。
UPDATE:用于更新表中记录。
DELETE:用于删除表中记录。
3. 数据查询语言(DQL)数据查询语言用于从数据库中检索数据,其常用的操作为SELECT。
4. 数据控制语言(DCL)数据控制语言用于控制数据库中的数据,包括用户的操作和访问权限等。
其常用的操作包括:GRANT:用于授予用户访问数据库的权限。
REVOKE:用于撤销用户访问数据库的权限。
5. 事务控制语言(TCL)事务控制语言用于控制事务的提交、回滚等操作。
其常用的操作包括:COMMIT:用于将事务中的操作永久地保存到数据库。
ROLLBACK:用于撤销事务中的操作。
二、SQL语句基础1. 数据表操作创建表:CREATE TABLE table_name (column_name data_type);插入数据:INSERT INTO table_name(column_Name1,column_Name2,…) VALUES (value1,value2,…)查询数据:SELECT * FROM table_name;删除表:DROP TABLE table_name;修改表:ALTER TABLE table_name ADD column_namedata_type;2. 数据类型整数类型:INT, SMALLINT, BIGINT。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Pgsql学习笔记RAISE NOTICE '%', a;--输出1、PGSQL自动递增序列的做法首先,在声明该列时用SERIAL类型,然后用setval(‘序列发生器’,递增的初始值)函数设置列的初始值,其中‘序列发生器’可以在表建好后,在系统生成的有关该表的SQL脚本中找到。
其次,在使用时只要调用nextval(‘序列发生器名称’)就可以了。
2、数组构造器,用关键字ARRAY。
行构造器,用关键字row()主要用途可以用在判断某字段是否为空。
3、类型转换的两种方式:CAST ( expression AS type )或expression::type,其expression为需要转换的表达式、type为要转为的类型。
4、可以用以下语句来重命名一个表或者字段重命名一字段:ALTER TABLE 表名 RENAME 字段名 TO 新的字段名重命名表名:ALTER TABLE 表名 RENAME TO 新的表名5、类型 decimal 和 numeric 是等效的。
常用的整型为integer,6、PGSQL实现取第一调记录的方法是在SQL语句后面加上limit 1 。
7、HAVING字句的作用是:当分组后需要加上条件是用HAVING不能用WHERE,而且HAVING子句中可以包含聚合函数。
WHERE 和 HAVING 的基本区别如下: WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算),而 HAVING 在分组和聚集之后选取分组的行。
因此,WHERE 子句不能包含聚集函数;因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。
相反,HAVING 子句总是包含聚集函数。
(严格说来,你可以写不使用聚集的 HAVING 子句,但这样做很少有用。
同样的条件可以更有效地用于 WHERE 阶段。
)8、随机查询一个表中的一条记录的的语句SELECT column FROM table ORDER BY RANDOM() LIMIT 19、PGSQL中几种字符串类型的比较:类型内部名称说明VARCHAR(n) varchar 指定了最大长度,变长字符串,不足定义长度的部分不补齐CHAR(n) bpchar 定长字符串,实际数据不足定义长度时,以空格补齐TEXT text 没有特别的上限限制(仅受行的最大长度限制)BYTEA bytea 变长字节序列(使用NULL也是允许的)"char" char 一个字符由上表可以看出,一般情况下为了避免空格带来的麻烦可以选用VARCHAR(n)这种方式来申明一个字符串10.创建序列号CREATE TABLE person (id SERIAL, --实际上PGSQL是通过SERIAL这种数据类型来实现序列号功能的name TEXT);11、在触发器中有两种对象:NEW和OLD(对于INSERT 和UPDATE 触发器而言,是NEW 行,对于DELETE 触发器而言,是OLD 行)12、触发器实例首先建立一个posts表CREATE TABLE posts(id serial NOT NULL,title character varying(50),body text,created timestamp with time zone DEFAULT now(),modified timestamp with time zone DEFAULT now())WITHOUT OIDS;ALTER TABLE posts OWNER TO postgres;建立触发器函数-- Function: posts_insert()-- DROP FUNCTION posts_insert();CREATE OR REPLACE FUNCTION posts_insert()RETURNS "trigger" AS$BODY$beginif(NEW.title <> 'aaaa')thenNEW.body='ce shi chu fa';end if;return NEW;end$BODY$LANGUAGE 'plpgsql' VOLATILE;ALTER FUNCTION posts_insert() OWNER TO postgres;建立触发器CREATE TRIGGER p_b_insertBEFORE INSERTON postsFOR EACH ROWEXECUTE PROCEDURE posts_insert();13、PGSQL中存在事务的保存点SAVEPOINT,当在事务中设置了保存点,一旦发生错误我们不用回滚到事务的开始,用ROLLBACK TO可以直接回滚到指定的保存点。
BEGIN;UPDATE accounts SET balance = balance - 100.00WHERE name = 'Alice';SAVEPOINT my_savepoint;UPDATE accounts SET balance = balance + 100.00WHERE name = 'Bob';-- 呀!加错钱了,应该用 Wally 的账号ROLLBACK TO my_savepoint;UPDATE accounts SET balance = balance + 100.00WHERE name = 'Wally';COMMIT;14、PGSQL表与表之间还支持继承,一旦子表继承了父表,那么子就拥有了父表的多有字段信息。
如:下面的例子capitals继承了cities。
CREATE TABLE cities (name text,population real,altitude int -- (单位是英尺));CREATE TABLE capitals (state char(2)) INHERITS (cities);输入这句SQL:” select * from capitals”会出现下面的情况15、限制和级联删除是两种最常见的选项,外键参照时有一下几个选项控制级联删除:(1)、RESTRICT禁止删除被引用的行。
(2)、NO ACTION的意思是如果在检查约束的时候,如果还存在任何引用行,则抛出错误;如果你不声明任何东西,那么它就是缺省的行为。
(这两个选择的实际区别是,NO ACTION 允许约束检查推迟到事务的晚些时候,而RESTRICT不行。
)(3)、CASCADE声明在删除一个被引用的行的时候,引用它的行也会被自动删除掉。
(4)、在外键字段上的动作还有两个选项:SET NULL和SET DEFAULT。
这样会导致在被引用行删除的时候,引用它们的字段分别设置为空或者缺省值。
请注意这些选项并不能让你逃脱被观察和约束的境地。
比如,如果一个动作声明SET DEFAULT,但是缺省值并不能满足外键,那么动作就会失败。
(5)、类似ON DELETE,还有ON UPDATE选项,它是在被引用字段修改(更新)的时候调用的。
可用的动作是一样的。
16、给表重命名“ALTER TABLE products RENAME TO items;”17、日期函数18、数组数据类型的下标从1开始。
19、UPDATE TAB1 SET(COL1,COL2,COL3)=(TAB2.COL1,TAB2.COL2,TAB2.COL3) FROM TAB2 <WHERE>语法20、单引号,pgsql的sql语句中单引号转义用两个单引号。
21、字符串处理函数PostgreSQL修改数据库表的列属性(ALTER语句)2010-08-03 15:03:11| 分类:数据库技术 |举报|字号订阅我们可以用客户端的语句改写,psql比如把数据库表journal里的keyword,ekeyword属性改为character(350),原来为character(200),那么我们可以这样操作:psql postgres -c "ALTER TABLE journal ALTER keyword TYPE character(350)"psql postgres -c "ALTER TABLE journal ALTER ekeyword TYPE character(350)"好了,修改结束。
描述ALTER TABLE 变更一个现存表的定义。
它有好几种子形式:ADD COLUMN这种形式用和 CREATE TABLE 里一样的语法向表中增加一个新的字段。
DROP COLUMN这种形式从表中删除一个字段。
请注意,和这个字段相关的索引和表约束也会被自动删除。
如果任何表之外的对象依赖于这个字段,你必须说 CASCADE,比如,外键参考,视图等等。
ALTER COLUMN TYPE这种类型改变表中一个字段的类型。
该字段涉及的索引和简单的表约束将被自动地转换为使用新的字段类型,方法是重新分析最初提供的表达式。
可选的 USING 子句声明如何从旧的字段值里计算新的字段值;如果省略,那么缺省的转换就是从旧类型像新类型的赋值转换。
如果从旧数据类型到新类型没有隐含或者赋值的转换,那么必须提供一个 USING。
SET/DROP DEFAULT这种形式为一个字段设置或者删除缺省值。
请注意缺省值只应用于随后的 INSERT 命令;它们不会导致已经在表中的行的数值的修改。
我们也可以为视图创建缺省,这个时候它们是在视图的 ON INSERT 规则应用之前插入 INSERT 语句中去的。
SET/DROP NOT NULL这些形式修改一个字段是否标记为允许 NULL 值或者是拒绝 NULL 值。
如果表在字段中包含非空值,那么你只可以 SET NOT NULL。
SET STATISTICS这个形式为随后的 ANALYZE 操作设置每字段的统计收集目标(default_statistics_target)。
目标的范围可以在 0 到 1000 之内设置;另外,把他设置为 -1 则表示重新恢复到使用系统缺省的统计目标。
有关 PostgreSQL 查询规划器使用的统计信息的更多信息,请参考Section 13.2。
SET STORAGE这种形式为一个字段设置存储模式。
这个设置控制这个字段是内联保存还是保存在一个附属的表里,以及数据是否要压缩。
PLAIN 必需用于定长的数值,比如 integer,并且是内联的,不压缩的。
MAIN 用于内联,可压缩的数据。
EXTERNAL 用于外部保存,不压缩的数据,而 EXTENDED 用于外部的压缩数据。