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 安装教程 带图 on windows

    千次阅读 2015-12-26 11:23:28
    第一步 去官网下载最新版PostGresql 安装版 (这次版本选择 9.4.5 ) http://www.postgres.cn/download (中国postgresql社区网址) http://www.enterprisedb.com/products-services-training/pgdownload(postgresql...
  • PostgreSQL:安装及中文显示

    千次阅读 2019-08-26 15:58:28
    一、PostgreSQL PostgreSQL (也称为Post-gress-Q-L)是一个跨平台的功能强大的开源对象关系数据库管理系统,由 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

    千次阅读 2019-03-01 09:59:12
    PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询...
  • 执行计划查看命令 explain[(option[,…])] explain [analyze][verbose]statement 可选的option选项有: analyze[boolean]:得到statement的真实运行时间。默认是false verbose[boolean]:得到statement语句的执行...
  • Centos安装与卸载PostgreSQL

    千次阅读 2019-04-02 12:00:59
    yum install postgresql 该命令会安装较低版本的PostgreSQL 8.4,具体过程如下: [root@April ~]# yum install postgresql Loaded plugins: fastestmirror, security Determining fastest mirrors ...
  • SpringBoot连接PostgreSql数据库

    万次阅读 2020-10-28 10:01:49
    在这里我使用SpringBoot配置Mybaits连接到PostgreSql数据库的。我的源码也会提供给大家(此文末尾),效果如下 数据库: 运行效果: 2、安装软件及依赖包 完整搭建SpringBoot及依赖包:...
  • PostgreSQL 优势

    万次阅读 2016-10-20 21:36:55
    PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),功能很强大。包括了可以说是目前世界上最丰富的数据类型的支持,比如 IP 类型和几何类型等等。 发现很多读者都问过这样一个问题:如果打算为...
  • PostgreSQL最常见问题

    千次阅读 2010-07-09 15:35:00
    PostgreSQL最常见问题 常见问题1.1)PostgreSQL 是什么?该怎么发音?1.2)PostgreSQL 的版权是什么?1.3)PostgreSQL 可以运行在哪些操作系统平台上?1.4)我从哪里能得到 PostgreSQL?1.5)我从哪里能得到对 PostgreSQL...
  • PostgreSql

    2016-01-04 23:51:28
    PostgreSQL Overview PostgreSQL has extensive and good help that should be the first source of information regarding this database product. This page outlines main differences to generic PostgreSQ
  • PostgreSQL的几种常见问题和解决方法

    万次阅读 2020-08-24 19:07:21
    本文介绍的问题分为两大类:一类是关于PostgreSQL无法启动的问题,另一类是PostgreSQL启动后,部分数据库对象无法访问的问题。 1.2软件环境 本文使用的 PostgreSQL 版本是 9.2。 1.3一些约定术语 PostgreSQ...
  • PostgreSQL 配置文件postgresql.conf 配置文件主要影响这服务器实例的基本行为,比如允许的连接数,操作允许占用的最大内存数,指定哪些用户可以用何种方式连接到数据库等等。当然这一切在数据库安装好时都有一个...
1 2 3 4 5 ... 20
收藏数 163,265
精华内容 65,306
关键字:

postgresql