postgresql_postgresql安装 - CSDN
postgresql 订阅
PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。 [1] 展开全文
PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。 [1]
信息
外文名
PostgreSQL
领    域
计算机技术
开发机构
加州大学伯克利分校
中文名
PostgreSQL
功    能
数据管理
特    性
复杂查询、外键、触发器
PostgreSQL简述
PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS)。PostgreSQL最初设想于1986年,当时被叫做Berkley Postgres Project。该项目一直到1994年都处于演进和修改中,直到开发人员Andrew Yu和Jolly Chen在Postgres中添加了一个SQL(Structured Query Language,结构化查询语言)翻译程序,该版本叫做Postgres95,在开放源代码社区发放。1996年,再次对Postgres95做了较大的改动,并将其作为PostgresSQL6.0版发布。该版本的Postgres提高了后端的速度,包括增强型SQL92标准以及重要的后端特性(包括子选择、默认值、约束和触发器)。PostgreSQL是一个非常健壮的软件包,有很多在大型商业RDBMS中所具有的特性,包括事务、子选择、触发器、视图、外键引用完整性和复杂锁定功能。另一方面,PostgreSQL也缺少商业数据库中某些可用的特性,如用户定义的类型、继承性和规则。从用户的角度来讲,PostgreSQL惟一不具备的主要特性就是外部连接,在今后的版本中会将其加入。PostgreSQL提供了两种可选模式。一种模式保证如果操作系统或硬件崩溃,则数据将保存到磁盘中,这种模式通常比大多数商业数据库要慢,这是因为它使用了刷新(或同步)方法;另一种模式与第一种不同,它不提供数据保证,但它通常比商业数据库运行得快。遗憾的是,还没有一种折中的模式:既提供一定程度的数据安全性,又有较快的执行速度。今后的版本将会提供这种模式。 [2] 
收起全文
精华内容
参与话题
  • PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。   PostgreSQL...
  • PostgreSQL入门篇

    万次阅读 2018-05-22 21:47:02
    PostgreSQL 鉴于网上PostgreSQL的资料看的让人头疼,所以想象中,这是一篇比较全面的PostgreSQL教程。我会尽量去写的详细全面易读易懂一点,也只能是尽力而为。为了方便,在后面的书写中,我会用pgsql表示...

    PostgreSQL

    鉴于网上PostgreSQL的资料看的让人头疼,所以想象中,这是一篇比较全面的PostgreSQL教程。我会尽量去写的详细全面易读易懂一点,也只能是尽力而为。为了方便,在后面的书写中,我会用pgsql表示PostgreSQL,理解一下打字困难户,能偷懒就偷个懒啦。
    5b037e031c9f2
    我写的内容都来自pgsql的官网,英语好的同学不妨去做做阅读理解。英语不好的同学,下面这个是给你们准备的。
    5b037ecd30e37
    本篇的环境是Window7 + PostgreSQL 10。


    入门

    架构基础

    行话:pgsql使用了客户端/服务器模式。一个pgsql会话包含包含两个进程:
    服务器进程。管理数据库文件,接收客户端程序的连接请求,代表客户端执行数据库操作。数据库服务器程序叫做postgres。客户端应用程序。进行数据库操作。客户端应用程序本质上可以非常多样化,一个客户端可以是一个面向文本的工具,一个图形界面应用程序,一个通过访问数据库来显示网页的web服务器,或者一个专门的数据库维护工具。有些是pgsql自带的,大部分是用户开发的。
    客户端和服务器可以在不同的主机上,通过TCP/IP连接通信。记住这一点很重要,因为客户机上的文件再服务器上可能是访问不到的,或者只能换个文件名访问。
    pgsql服务器可以处理多并发的连接,它会为每个连接fork一个新的进程。客户端和新的服务器进程的通信与就服务器进程没有关系。主服务器进程会一直保持运行,等待客户端连接。

    创建数据库

    创建数据库可以检查你是否连接到了服务器。一个pgsql服务器可以管理很多数据库。
    创建一个名为mydb的数据库:
    $ createdb mydb
    如果回车之后没有任何输出,说明创建数据库成功。你可以跳过本节了。
    5b0389b049c68
    万一不幸出错了,这里给出了一些解决办法。
    1. 找不到命令,错误如下:
    createdb: command not found
    说明pgsql的bin目录没有添加到环境变量。你可以选择将bin目录添加到环境变量,或者去bin目录下打开命令窗口,再或者使用绝对路径调用createdb命令。
    $ /user/local/pgsql/bin/createdb mydb
    建议添加还是添加环境变量,一劳永逸。
    2. 服务未启动,错误如下:
    createdb: could not connect to database postgres: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

    表示服务器未启动,至少是在createdb执行的时候还未启动。多试试吧,我也不知道该咋办。
    3. 没有账户,错误如下:
    createdb: could not connect to database postgres: FATAL: role "joe" does not exist
    这里joe是操作系统账户,pgsql用户账户与操作系统账户不同。你需要登录Postgres账户,创建一个用户账户。也可能是你被分配的pgsql账户名与操作系统用户名不同,这时,你可以使用-U选项指定账户或设置PGUSER环境变量来指定pgsql的用户名。
    $ createdb -U user mydb
    其中,user就是你的pgsql账户名。
    4. 权限不足,错误如下:
    createdb: database creation failed: ERROR: permission denied to create database
    这是你的账户没有创建数据库的权限,你可以登录管理员账户进行修改。
    pgsql允许创建任意数量的数据库。数据库名称必须以英文字母开头,且不超过63字节。
    可以省略数据库名,创建与当前用户同名的数据库,如下:
    $ createdb
    删除数据库用dropdb命令:
    $ dropdb mydb
    dropdb命令必须指定数据库名称,即使是与用户名同名的数据库也必须指定,它不会默认用账户名。它会删除与数据库相关联的所有文件,并且不能撤销,所以一定要三思而行。

    访问数据库

    有三种方式可以访问数据库:
    pgsql终端,psql命令行工具;pgAdmin或支持ODBC或JDBC的office套件;编程语言API。
    这里只介绍第一种方式,第二种方式不做介绍,第三种方式后面再说。
    打开cmd(或PowerShell)命令行窗口,希望你之前已经设置过环境 变量了。输入一下命令启动psql
    $ psql mydb
    mydb就是之前创建的数据库。如果不指定数据库名称,默认会访问与当前账户名同名的数据库。
    回车后输入密码,你会得到如下输出:
    ​x psql (10.4)Type "help" for help.​mydb=>
    mydb=>就是命令提示符,你可以输入SQL指令(以;结尾)或psql命令(以\开头)。
    如果命令提示符是mydb=#,表示当前账户是超级用户。
    你可以输入以下几个命令试试:
    mydb=> SELECT version();
    mydb=> SELECT current_date;
    mydb=> SELECT 2 + 2;
    上面三个命令都是SQL命令,它们都以;结尾。
    psql内部命令都以\开头。例如\h命令可以获取帮助,\q命令用来退出psql。
    mydb=> \h
    mydb=> \q

    psql与cmd

    pgsql安装后会默认安装两个工具,pgAdmin和SQL Shell(psql)。前者是图形界面工具,后者是命令行工具。在打开psql之后首先需要登录账户,然后才能使用。
    1. 双击打开psql。
    这里写图片描述
    2. 按照提示一次输入服务器地址(本地使用127.0.0.1),数据库名字,端口号(默认5432),账户名,密码。
    这里写图片描述
    3. 回车之后就可以登录到你的数据库,注意,输入密码是不会有任何显示的。
    这里写图片描述
    现在你可以输入SQL命令或psql命令来操作数据库了。pgsql也提供了许多命令可以通过cmd运行,比如前面讲的createdb命令。pgsql安装默认不会将bin目录写到环境变量,因此为了使用方便,我们可以自行这样做。在cmd中运行psql同样简单,只需要打开cmd然后输入相应的命令即可,前提是你已经设置了环境变量。本节所讲操作就是在cmd中进行的。
    这里写图片描述
    前面以说过,-U选项用来指定pgsql账户,psql命令启动psql。输入密码后即可进入psql。这与直接使用pgsql提供的SQL Shell效果是一样的。
    这里写图片描述
    好了,入门就入到这里了。下一期是SQL语言的简介。

    展开全文
  • PostgreSql简介

    万次阅读 2019-04-22 14:50:00
    关于PostgreSQL: 1.什么是PostgreSqlPostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL的起源可以追溯到1986年...

    关于PostgreSQL:

    1.什么是PostgreSql:

    PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL的起源可以追溯到1986年,作为加州大学伯克利分校POSTGRES项目的一部分,并且在核心平台上进行了30多年的积极开发。

    PostgresSQL凭借其经过验证的架构,可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,以始终如一地提供高性能和创新的解决方案。PostgreSQL在所有主要操作系统开始使用PostgreSQL从未如此简单。

     

    2.为什么要使用PostgreSQL

    PostgreSql提供了许多功能,旨在帮助开发人员构建应用程序,管理员保护数据完整性并且构建容错环境,并帮助你管理数据,无论数据集的大小。除了免费和开源之外,Postgre SQL还具有高度的可扩展性。例如,你可以定义自己的数据类型,构建自定义SQL函数(此sql函数在另一篇帖子讨论:点此跳转),甚至可以编写来自不同编程语言的代码,而不需要重新编译数据库。

    PostgreSql试图符合SQL标准,在这种标准中,这种一致性不会与传统特性相矛盾,或者可能导致糟糕的架构决策。支持SQL标准所需的许多功能,但是有时候语法或者功能略有不同。随着时间的推移,可以预期进一步向一致性迈进。从2018年10月发布的11版本开始,PostgreSQL符合SQL:2011核心一致性的179个强制性功能中的至少160个,在此之前,没有任何关系型数据库符合此标准的完全符合。

    3.下面是PostgreSQL中的各种功能介绍:

    1. 数据类型:
      1. 基本类型:Integer, Numeric, String, Boolean
      2. 结构类型:Date/Time, Array, Range, UUID
      3. 文档类型:JSON/JSONB, XML, Key-value(Hstore)
      4. 几何类型:Point, Line, Circle, Polygon
      5. 自定义类型:Composite, Custom Types

     

    1. 数据的完整性
      1. 唯一性,不为空
      2. 主键
      3. 外键
      4. 排除约束
      5. 显式锁定,咨询锁定

     

    1. 并发性,性能
      1. 索引:
      2. 高级索引
      3. 复杂的查询计划期/优化器
      4. 交互
      5. 多版本并发控制(MVCC)
      6. 读取查询的并行化和构建B树索引
      7. 表分区
      8. Sql标准中定义的所有事物隔离级别,包括Serializable
      9. 即时表达式汇编(JIT)

     

    1. 可靠性,灾难恢复
      1. 预写日志(WAL)
      2. 复制:异步,同步,逻辑
      3. 时间点恢复(pitr),主动备用
      4. 表空间

     

    1. 安全性
      1. 身份验证:GSSAPI, SSPI, LDAP, SCRAM-SHA-256, 证书等
      2. 强大的访问控制系统
      3. 列和行级安全性

     

    1. 可扩展性
      1. 存储的功能和程序
      2. 程序语言:PL/PGSQL, Perl, Python (more)
      3. 外部数据包装器:使用标准SQL接口连接到其他数据库或流
      4. 许多提供附加功能的扩展,包括PostGIS

     

    1. 国际化,文本搜索
      1. 支持国际字符集,例如通过ICU校对
      2. 全文检索

     

    1. 对比Mysql:
      1. PostgreSQL的稳定性极强,Innodb等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足的进步,然而很多Mysql用户都遇到过Server级的数据库丢失的场景---Mysql系统库是MyISAM的,相较而言,PG数据库在这方面要好一些。
      2. 任何系统都有他的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍然可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而MySQL明细出现一个波峰后下滑。
      3. PG多年在GIS领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG中有大量的字典、数组、bitmap等数据类型,相比之下MaySQL就差很多,insagram就是因为PG的空间数据库扩展POSTGIS远远强于MySQL的my spatial而采用PGSQL的。
      4. PG的“无锁定”特性非常突出,甚至包括vacuum这样的整理数据空间的操作,这个和PGSSQL的MVCC实现有关系。
      5. PG的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
      6. PG有极其强悍的SQL编程能力,有丰富的统计函数和统计语法支持,比如分析函数(Oracle的叫法,PG里面叫Window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MySQL就差的很远,很多分析功能那个都没有,腾讯内部数据存储主要是Mysql,但是主要的数据分析就是Hadoop+PGsql。
      7. PG的有很多中集群架构可以选择,plproxy可以支持语句级的镜像或者分片,slony可以进行字段级的同步设置,standby可以构建WAL文件级或者流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
      8. 一般关系型数据库的字符串有限定长度8k左右,无限长Text类型的功能受限,只能作为外部大数据访问。而PG的TEXT类型可以直接方法,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库就可以省略了
      9. 对于web应用来说,复制的特性很重要,Mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate, 是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时pgsql还提供stream复制。
      10. Pgsql对于numa架构的支持要比mysql强一些,比mysql对于读的性能要好些,pgsql提交可以完全异步,而mysql的内存表不够实用(表锁原因)
    展开全文
  • postgresql 中文学习手册

    热门讨论 2020-07-30 23:33:23
    PostgreSQL学习手册(数据表) PostgreSQL学习手册(模式Schema) PostgreSQL学习手册(表的继承和分区) PostgreSQL学习手册(常用数据类型) PostgreSQL学习手册(函数和操作符<一>) PostgreSQL学习手册(函数和操作符<二>) ...
  • PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。   PostgreSQL...
  • <insert id="insert" parameterType="com.baozun.entity.TbUser" > <selectKey resultType="java.lang.Integer" keyProperty="id" order="BEFORE" > SELECT nextval('test_c_id_seq') </se...
    <insert id="insert" parameterType="com.baozun.entity.TbUser" >
      <selectKey  resultType="java.lang.Integer" keyProperty="id" order="BEFORE" >
        SELECT nextval('test_c_id_seq')
      </selectKey>
      insert into tb_user (user_name, user_password)
      values (#{userName,jdbcType=VARCHAR}, #{userPassword,jdbcType=VARCHAR})
    </insert>

    <selectKey>为向主键id赋值为序列的下一个值

    展开全文
  • 建表SQL: DROP TABLE IF EXISTS person; CREATE TABLE person( person_id serial PRIMARY KEY NOT NULL, person_name VARCHAR(60), gender INT, person_addr VARCHAR(100), ...注意:在postgresql中建表...

    建表SQL:

    DROP TABLE IF EXISTS person;
    CREATE TABLE person(
     person_id serial PRIMARY KEY NOT NULL,
     person_name VARCHAR(60),
     gender INT,
     person_addr VARCHAR(100),
     birthday DATE
    );

    注意:在postgresql中建表的时候,将主键id字段设置成serial类型,会自动生成一个关联主键id的序列(如下图中的数据库会创建一个隐含序列"person_person_id_seq"),SERIAL类型的字段和MySQL中的自增唯一ID等价。

    当你在你的数据表中定义了一个SERIAL类型的列后,SERIAL的自增功能会被自动添加到数据库。

    --------------------------------------------------------------------------------------

    接口Controller:

    @Component
    @Path("/person")
    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
    public class PersonController {
        @Autowired
        PersonService personService;
    
        @POST
        @Path("/insert")
        @Consumes(MediaType.APPLICATION_JSON)
        public ResultModel insert() {
            Person person = new Person();
            person.setBirthday(new Date());
            person.setGender(3);
            person.setPersonAddr("广州");
            person.setPersonName("小红");
            personService.insert(person);
            return ResultModel.ok(person);
        }

     

    注意上面的Person对象没有为personId赋值。因为person表的主键列person_id是自增的。

    下面是使用mybatis的逆向工程生成的PersonMapper接口:

    public interface PersonMapper {
        @Insert({
            "insert into person (" +
                    "PERSON_ID, " +
                    "PERSON_NAME, " +
                    "GENDER, " +
                    "PERSON_ADDR, " +
                    "BIRTHDAY)",
            "values (" +
                    "#{personId,jdbcType=INTEGER}, " +
                    "#{personName,jdbcType=VARCHAR}, " +
                    "#{gender,jdbcType=INTEGER}, " +
                    "#{personAddr,jdbcType=VARCHAR}, " +
                    "#{birthday,jdbcType=DATE})"
        })
        int insert(Person person);
    }

    由于person表的主键person_id是自增的,所以访问Controller中的"/person/insert"方法插入数据的时候会报如下错误:

    HTTP Status 500 - org.springframework.dao.DataIntegrityViolationException:
    type Exception report
    message org.springframework.dao.DataIntegrityViolationException:
    description The server encountered an internal error that prevented it from fulfilling this request.
    exception
    
    javax.servlet.ServletException: org.springframework.dao.DataIntegrityViolationException: 
    ### Error updating database.  Cause: org.postgresql.util.PSQLException: ERROR: null value in column "person_id" violates not-null constraint
      详细:Failing row contains (null, 小兰, 2, 重庆, 2017-06-04).
    ### The error may involve com.zhaopin.dao.PersonMapper.insert-Inline
    ### The error occurred while setting parameters
    ### SQL: insert into person (PERSON_ID, PERSON_NAME, GENDER, PERSON_ADDR, BIRTHDAY) values (?, ?, ?, ?, ?)
    ### Cause: org.postgresql.util.PSQLException: ERROR: null value in column "person_id" violates not-null constraint
      详细:Failing row contains (null, 小兰, 2, 重庆, 2017-06-04).
    ; SQL []; ERROR: null value in column "person_id" violates not-null constraint
      详细:Failing row contains (null, 小兰, 2, 重庆, 2017-06-04).; nested exception is org.postgresql.util.PSQLException: ERROR: null value in column "person_id" violates not-null constraint
      详细:Failing row contains (null, 小兰, 2, 重庆, 2017-06-04).
        org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:391)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    root cause
    
    org.springframework.dao.DataIntegrityViolationException: 
    ### Error updating database.  Cause: org.postgresql.util.PSQLException: ERROR: null value in column "person_id" violates not-null constraint
      详细:Failing row contains (null, 小兰, 2, 重庆, 2017-06-04).
    ### The error may involve com.zhaopin.dao.PersonMapper.insert-Inline
    ### The error occurred while setting parameters
    ### SQL: insert into person (PERSON_ID, PERSON_NAME, GENDER, PERSON_ADDR, BIRTHDAY) values (?, ?, ?, ?, ?)
    ### Cause: org.postgresql.util.PSQLException: ERROR: null value in column "person_id" violates not-null constraint
      详细:Failing row contains (null, 小兰, 2, 重庆, 2017-06-04).
    ; SQL []; ERROR: null value in column "person_id" violates not-null constraint
      详细:Failing row contains (null, 小兰, 2, 重庆, 2017-06-04).; nested exception is org.postgresql.util.PSQLException: ERROR: null value in column "person_id" violates not-null constraint
      详细:Failing row contains (null, 小兰, 2, 重庆, 2017-06-04).
        org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:243)
        org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
        org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74)
        org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:399)
        com.sun.proxy.$Proxy23.insert(Unknown Source)
        org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:253)
        org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:52)
        org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
        com.sun.proxy.$Proxy31.insert(Unknown Source)
        com.zhaopin.service.impl.PersonServiceImpl.insert(PersonServiceImpl.java:30)
        com.zhaopin.api.PersonController.insert(PersonController.java:58)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.lang.reflect.Method.invoke(Method.java:498)
        org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
        org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151)
        org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:171)
        org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:195)
        org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)
        org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:387)
        org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:331)
        org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:103)
        org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:269)
        org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
        org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
        org.glassfish.jersey.internal.Errors.process(Errors.java:315)
        org.glassfish.jersey.internal.Errors.process(Errors.java:297)
        org.glassfish.jersey.internal.Errors.process(Errors.java:267)
        org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)
        org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:252)
        org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1025)
        org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:372)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    root cause
    
    org.postgresql.util.PSQLException: ERROR: null value in column "person_id" violates not-null constraint
      详细:Failing row contains (null, 小兰, 2, 重庆, 2017-06-04).
        org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
        org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
        org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
        org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)
        org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:420)
        org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:413)
        com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:493)
        org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:45)
        org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:73)
        org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49)
        org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:115)
        org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75)
        org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:170)
        org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:157)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.lang.reflect.Method.invoke(Method.java:498)
        org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:386)
        com.sun.proxy.$Proxy23.insert(Unknown Source)
        org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:253)
        org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:52)
        org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
        com.sun.proxy.$Proxy31.insert(Unknown Source)
        com.zhaopin.service.impl.PersonServiceImpl.insert(PersonServiceImpl.java:30)
        com.zhaopin.api.PersonController.insert(PersonController.java:58)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.lang.reflect.Method.invoke(Method.java:498)
        org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
        org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151)
        org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:171)
        org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:195)
        org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)
        org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:387)
        org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:331)
        org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:103)
        org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:269)
        org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
        org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
        org.glassfish.jersey.internal.Errors.process(Errors.java:315)
        org.glassfish.jersey.internal.Errors.process(Errors.java:297)
        org.glassfish.jersey.internal.Errors.process(Errors.java:267)
        org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)
        org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:252)
        org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1025)
        org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:372)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
        org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    note The full stack trace of the root cause is available in the Apache Tomcat/7.0.53 logs.
    
    Apache Tomcat/7.0.53

    意思是说"person_id"这一列违反非空约束,不能为null。

    解决办法:修改PersonMapper中的@Insert注解中的SQL语句,首先把person_id列去掉。

    然后增加一个@Options注解,声明主键列是自增的:

    public interface PersonMapper {
        @Insert({
            "insert into person (" +
                    "person_name, " +
                    "gender, " +
                    "person_addr, " +
                    "birthday)",
            "values (#{personName,jdbcType=VARCHAR}, " +
                    "#{gender,jdbcType=INTEGER}, " +
                    "#{personAddr,jdbcType=VARCHAR}, " +
                    "#{birthday,jdbcType=DATE})"
        })
        @Options(useGeneratedKeys=true, keyProperty="personId",keyColumn = "person_id")
        int insert(Person person);
    }

     表名都改为了小写,数据库中表字段名也都是小写。保持一致。经测试,如果数据库中的表字段名是大写的话,会报错。

     再次测试插入,成功,接口返回结果:

     

    如果觉得本文对您有帮助,不妨扫描下方微信二维码打赏点,您的鼓励是我前进最大的动力:

     

    展开全文
  • 在实体类中的id字段上使用注解 @Id @KeySql(useGeneratedKeys = true) @Column(name = "id",insertable = false) private Integer id; 在使用tkmybatis的insert(T record)或者insertSelective(T record)成功后 ...
  • PostgreSQL:安装及中文显示

    千次阅读 2019-08-26 15:58:28
    一、PostgreSQL PostgreSQL (也称为Post-gress-Q-L)是一个跨平台的功能强大的开源对象关系数据库管理系统,由 PostgreSQL 全球开发集团(全球志愿者团队)开发。 它不受任何公司或其他私人实体控制,其源代码是...
  • PostgreSQL一些常用命令

    万次阅读 多人点赞 2017-04-12 15:07:24
    postgresql
  • PostgreSQL 之 锁的查看

    万次阅读 2018-03-01 09:23:39
    要查看pg中的锁,需要查看pg_locks这个视图pg_locks 字段名称类型引用描述locktypetext 可锁对象的类型: relation, extend, page, tuple, transactionid, virtualxid, object, userlock, or advisorydatabaseoidg...
  • PostgreSQL默认用户名与密码

    万次阅读 2017-06-06 19:22:32
    参考: http://blog.csdn.net/shangzwz/article/details/8601700
  • centos7 安装最新版postgresql10

    万次阅读 多人点赞 2018-02-10 14:57:30
    在mysql被收购之后,大家发现了另一款开源的数据库,postgresql,虽然centos自带版本9.2也可以用,但是最近的几次升级支持了更多更新的内容,比如,PostgreSQL有一个MySQL无法比拟的优势,那就是PostGIS,PostGIS...
  • postgresql 主键自增

    万次阅读 2015-10-26 14:25:22
    postgreSQL 自增需要使用序列 1.使用SERIAL CREATE TABLE users ( id SERIAL primary key , name character varying, password character varying ) 自动创建名为users_id_seq的序列,且MAXVALUE=...
  • ubuntu设置postgresql允许被远程访问

    万次阅读 2018-10-08 11:30:35
    postgresql.conf存放位置在/etc/postgresql/9.x/main下,这里的x取决于你安装PostgreSQL的版本号,编辑或添加下面一行,使PostgreSQL可以接受来自任意IP的连接请求。 listen_addresses = '*' 2. 修改pg_hba.conf pg...
  • Ubuntu完整卸载postgresql

    万次阅读 2017-11-17 15:52:17
    sudo apt-get --purge remove postgresql\* 删除配置及文相关件 sudo rm -r /etc/postgresql/ sudo rm -r /etc/postgresql-common/ sudo rm -r /var/lib/postgresql/ 删除用户和所在组 sudo userdel -r postgres ...
  • PostgreSQL及PostGIS安装和使用

    万次阅读 2017-04-12 14:23:58
    PostgreSQL及PostGIS安装和使用 一,软件下载  https://www.postgresql.org/  安装PostGIS必须先安装PostgreSQL。  postgresql-9.6.2-3-windows-x64.exe  postgis_2_3_pg96.exe 安装过程中选择下载。 ...
  • Ubuntu上彻底卸载Postgresql

    千次阅读 2013-11-21 21:39:49
    卸载当前所有Postgresql 相关的Package: apt-get remove postgresql* The following packages will be REMOVE
  • linux下安装PostgreSQL数据库

    千次阅读 2016-09-21 15:47:16
    0.编译环境 Linux: CentOS 5.5gcc: ...1. 安装PostgreSQL 1) 解压postgresql-9.1.7.tar.bz2 #tar jxvf postgresql-9.1.7.tar.bz2   2) 进入解压后的postgresql-9.1.7目录 #cd postgresql-9.1.7 3) 编译
  • org.postgresql.util.psqlexception总结

    万次阅读 2018-03-14 11:49:08
    异常一:连接数据库报乱码异常原因:连自己本地数据库最好不用自己IP,而是用localhost或者127.0.0.1错误配置文件如下:异常二:org.postgresql.util.PSQLException: ResultSet已关闭。原因:本地的postgresql jar包...
1 2 3 4 5 ... 20
收藏数 144,073
精华内容 57,629
关键字:

postgresql