GVKun编程网logo

解决postgresql 序列跳值的问题(pgsql设置序列值)

23

此处将为大家介绍关于解决postgresql序列跳值的问题的详细内容,并且为您解答有关pgsql设置序列值的相关问题,此外,我们还将为您介绍关于centos7下源码编译安装php支持PostgreSQ

此处将为大家介绍关于解决postgresql 序列跳值的问题的详细内容,并且为您解答有关pgsql设置序列值的相关问题,此外,我们还将为您介绍关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、linux系统上解决postgres远程连接不上的问题、postgresql – JPA和Postgres序列预分配大小设置不正确、Postgresql – Postgres ALTER TABLE的问题的有用信息。

本文目录一览:

解决postgresql 序列跳值的问题(pgsql设置序列值)

解决postgresql 序列跳值的问题(pgsql设置序列值)

  项目招商找A5 快速获取精准代理名单

这篇文章主要介绍了解决postgresql 序列跳值的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。

一、序列的创建

CREATE SEQUENCE seq_bm_menuid
 INCREMENT 1
 MINVALUE 1
 MAXVALUE 999999999999999999
 START 1
 CACHE 5;

大家从以上语句中可以看出当前序列的cache为5,那么这个cache是在什么时候起作用呢?

二、遇到的序列跳值问题

当我们的web应用访问postgresql数据库,使用nextval('seq_bm_menuid')获取序列值,然后插入到我们的业务表中时,发现业务表中该序列值对应字段的值不连续,以5为间隔发生跳跃,

如图所示:

三、做个小实验

为了弄清楚序列跳值的原因,做个小实验,方法如下:在pgAdmin中新建两个查询窗口,分别执行select nextval('seq_bm_menuid');语句,当在第一个查询窗口执行语句时,返回序列值为147;当在第二个查询窗口执行语句时,返回序列值为152;果然还是间隔为5的产生序列值啊,继续往下做就知道是怎么回事了。

我们回到第一个查询窗口,再次执行语句,此时返回序列值为148;再到第二个查询窗口,再次执行语句,此时返回序列值为153;到这里终于搞明白了序列的cache是作用于会话的,我们新建两个查询窗口实际是两个会话,postgresql数据库为每个会话cache了5个序列值,到此终于弄清楚了序列跳值的原因了。

补充:重新设置 PostGresql 序列起始值

修改设置 Postgresql 序列值的场景并不多见,一般在不规范使用数据库的情况下存在!

有时候,数据库的序列错乱后,会发生 Detail: Key (xttblog_id)=(200007) already exists. 的错误提示。这种情况是说,200007 这个序列已经被占用了。

修改这个错误的办法有两种

一种是执行 nextval 函数,跳过已存在的 key。

1SELECT nextval('xttblog_id_seq');

还有一种情况是,重新设置序列的起始值,跳过已经存在的 key。

-- 序列重置到2020alter sequence xttblog_id_seq restart with 2020

上面我重置序列到 2020。那序列就会从 2020 开始,之前小于 2020 的将会被跳过。

文章来源:

来源地址:https://www.jb51.net/article/205234.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yy@haotui.cn 举报,一经查实,本站将立刻删除。

centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教

centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教

1. 下载源码

$ mkdir /usr/downloads
$ wget -c http://cn2.php.net/distributions/php-5.6.20.tar.gz
$ tar -xvf php-5.6.20.tar.gz
$ mv php-5.6.20 /usr/local/src
$ cd !$ & cd php-5.6.20
登录后复制

2. 阅读安装指导

$ ls -also
$ less README
$ less INSTALL
登录后复制

3. 安装依赖包

$ yum install apr apr-util apr-devel apr-util-devel prce lynx
登录后复制

4. 安装httpd

$ wget -c http://apache.fayea.com//httpd/httpd-2.4.20.tar.gz
$ tar -xvf httpd-2.4.20.tar.gz
$ cd httpd-2.4.20
$ ./configure \
--prefix=/usr/local/programs/apache2 \
--enable-rewrite \
--enable-so \
--enable-headers \
--enable-expires \
--with-mpm=worker \
--enable-modules=most \
--enable-deflate \
--enable-module=shared
$ make
$ make install
$ cd /usr/local/programs/apache2
$ cp bin/apachectl /etc/init.d/httpd ## 复制启动脚本
$ /etc/init.d/httpd start ## 启动apache服务器,访问http://localhost/
$ egrep -v ''^[ ]*#|^$'' /usr/local/apache2/conf/httpd.conf | nl ## 查看apache服务器的配置
## 将apache加入系统服务
vi /etc/rc.d/rc.local
```
/usr/local/programs/apache2/bin/apachectl start
```
$ cat /etc/rc.local
登录后复制

4. 安装postgresql

立即学习“PHP免费学习笔记(深入)”;

$ yum install readline-devel  ## 安装readline依赖
$ cd /usr/downloads
$ wget -c https://ftp.postgresql.org/pub/source/v9.5.0/postgresql-9.5.0.tar.bz2
$ tar -xvf postgresql-9.5.0.tar.bz2
$ cd postgresql-9.5.0
$ ./configure --prefix=/usr/local/programs/postgresql
$ make
$ su
$ make install
$ /sbin/ldconfig /usr/local/programs/postgresql/lib ## 刷新下共享动态库
$ cd /usr/local/programs/postgresql
$ bin/psql --version  ## 检查运行情况
## 开始对postgresql的配置
$ vi /etc/profile.d/postgresql.sh ## 增加环境变量,不推荐直接在/etc/profile中添加,系统更新升级时会需要merge
``` 
PATH=/usr/local/programs/postgresql:$PATH
export PATH
```
$ source /etc/profile ## 更新环境变量

## 增加用户和其他文件夹
$ adduser postgres
$ passwd postgres 
$ mkdir /usr/local/programs/postgresql/logs
$ mkdir /usr/local/programs/postgresql/data
$ chown postgres /usr/local/programs/postgresql/data
$ su - postgres

## 初始化数据库
$ ./bin/initdb -D ./data
$ ./bin/createdb test
$ ./bin/psql test
## 已有数据库,可导入data文件夹后尝试root访问,假如带密码,可能需要进一步研究下
$ ./bin/postgres -D ./data >./logs/start-log-1.log 2>&1 &
$ ./bin/psql --list  ##列出数据库
## ok,安装完成

## 自定义设置,权限控制等,可以跳过,等熟悉使用后再做
## 编辑数据库配置及权限文件:
$ vi /usr/local/programs/postgresql/data/postgresql.conf   ## 数据库配置文件
$ chown postgres postgresql.conf
$ chmod 644 postgresql.conf
$ vi /usr/local/programs/postgresql/data/pg_hba.conf   ## 权限文件
$ vi /usr/local/programs/postgresql/data/pg_ident.conf

## 设置开机自启动:
$ vi /etc/rc.d/rc.local    ## 添加如下内容
```
/usr/local/programs/postgresql/bin/postgresql start
```
登录后复制

5. 安装php

## 源码已经在第一步中下载,现在开始安装:
$ yum install libxml2 libxml2-devel libpng libpng-devel libjpeg libjpeg-devel freetype freetype-devel
$ ./configure \
--prefix=/usr/local/programs/php \
--with-apxs2=/usr/local/programs/apache2/bin/apxs \
--with-zlib \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-zlib-dir \
--enable-mbstring \
--with-pgsql=/usr/local/programs/postgresql \
--with-pdo-pgsql=/usr/local/programs/postgresql 
$ make
$ make test
> Bug #42718 (unsafe_raw filter not applied when configured as default filter) [ext/filter/tests/bug42718.phpt]  XFAIL REASON: FILTER_UNSAFE_RAW not applied when configured as default filter, even with flags
> Bug #67296 (filter_input doesn''t validate variables) [ext/filter/tests/bug49184.phpt]  XFAIL REASON: See Bug #49184
> Bug #53640 (XBM images require width to be multiple of 8) [ext/gd/tests/bug53640.phpt]  XFAIL REASON: Padding is not implemented yet
> zend multibyte (7) [ext/mbstring/tests/zend_multibyte-07.phpt]  XFAIL REASON: https://bugs.php.net/bug.php?id=66582
> zend multibyte (9) [ext/mbstring/tests/zend_multibyte-09.phpt]  XFAIL REASON: https://bugs.php.net/bug.php?id=66582
>Bug #70470 (Built-in server truncates headers spanning over TCP packets) [sapi/cli/tests/bug70470.phpt]  XFAIL REASON: bug is not fixed yet

## 查阅官方的bug,发现:
> id=66582: status : Closed. Fixed in master (PHP7)
> id=42718: status : Assigned
> id=42718: reference to id=49184, unsolved for many years
## 那就不关心了,直接装吧
$ make install
> You may want to add: /usr/local/programs/php/lib/php to your php.ini include_path

## 那就按它说的设置吧
$ cp php.ini-development /usr/local/programs/php/lib/php.ini
```
include_path = ".;/usr/local/programs/php/lib/php"

## 然后,编辑httpd的设置,确保其能正确解析php文件
```
...
LoadModule php5_module modules/libphp5.so
...
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .php5

...
<ifmodule dir_module>
    DirectoryIndex index.html index.php
</ifmodule>     
```

## 重启httpd,测试
$ cd /usr/local/programs/apache2
$ bin/httpd -h
$ bin/httpd -k stop
$ bin/httpd -f conf/httpd.conf
## 默认设置的www页面在./htdocs/下,那就先去里面建一个测试页面吧
$ vi htdocs/index.php
```
<?php phpinfo(); ?>
```
$ curl http://localhost/index.php |grep postgresql
#ok
登录后复制

后续应该做的事

* 1. 启动时,不需要要手动指定配置文件
* 2. php初始化www目录设置
* 3. php 用户、权限管理等

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了centos 7下源码编译安装php支持PostgreSQL,包括了postgresql,centos 7方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

linux系统上解决postgres远程连接不上的问题

linux系统上解决postgres远程连接不上的问题

需要修改两个文件。第一步:

a、pg_hba.conf

b、postgresql.conf

如果不知道这连个文件在哪的话,可以执行locate +文件名 这个命令去查看文件在哪,例如执行 “locate postgresql.conf”

第二步:执行  cd /opt/thunisoft/abdata/3.5/abase1/

              [root@iZ88hrxiuy7Z ~]# cd /opt/thunisoft/abdata/3.5/abase1/      

              查看该目录下有哪些文件

             [root@iZ88hrxiuy7Z abase1]# ll

            修改postgresql.conf文件

             vim postgresql.conf

           按住i键进入修改模式,将listen_addresses = ''localhost‘ 修改成listen_addresses = ''*''   ,按住esc键退出修改模式,:wq退出保存。ps:如果你的postgresql.conf里的listen_addresses本事就是 = ''*'' ,则可以跳过此步骤。

第三步,修改pg_hba.conf文件

          执行  locate pg_hba.conf

        

        执行cd /opt/thunisoft/abdata/3.5/abase1/

        vim pg_hba.conf

       按住i键进入修改模式。

      32 -> 192.168.1.1/32 表示必须是来自这个IP地址的访问才合法;
   24 -> 192.168.1.0/24 表示只要来自192.168.1.0 ~ 192.168.1.255的都合法;
  16 -> 192.168.0.0/16 表示只要来自192.168.0.0 ~ 192.168.255.255的都合法;
   8   -> 192.0.0.0/16 表示只要来自192.0.0.0 ~ 192.255.255.255的都合法;
  0   -> 0.0.0.0/0 表示全部IP地址都合法,合法的IP地址即可

    大家可以根据自己的需要进行修改。

   两个文件都修改好后,重启就可以了。

          

           

 

          

 

postgresql – JPA和Postgres序列预分配大小设置不正确

postgresql – JPA和Postgres序列预分配大小设置不正确

由于序列问题,我无法保留任何实体.我使用Glssfish 4,Postgres 9.3 JPA EJB3和Netbeans 8.
在兴奋之下:

Finest:   persist() operation called on: MyUser{id=null,email=a@e.it,password=test,firstname=test,lastname=test,company=Test}.
    Finest:   Execute query ValueReadQuery(sql="select nextval(''mom_seq_id'')")
    Finest:   Connection acquired from connection pool [read].
    Finest:   reconnecting to external connection pool
    Fine:   select nextval(mom_seq_id)
    Finest:   Connection released to connection pool [read].
    Warning:   Local Exception Stack: 
    Exception [EclipseLink-7027] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.ValidationException
    Exception Description: The sequence named [mom_seq_id] is setup incorrectly.  Its increment does not match its pre-allocation size.
at org.eclipse.persistence.exceptions.ValidationException.sequenceSetupIncorrectly(ValidationException.java:1604)
at org.eclipse.persistence.sequencing.StandardSequence.createVector(StandardSequence.java:96)
    ...

Postgres上的序列:

CREATE SEQUENCE my_seq_id
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 27
  CACHE 1;
ALTER TABLE my_seq_id
  OWNER TO postgres;
COMMENT ON SEQUENCE my_seq_id
  IS ''Sequence for autoincrement id on MyClass'';

以及我的实体的摘录:

@Entity
@Table(name = "myuser")
@XmlRootElement
public class MyUser implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="MYSEQ",sequenceName="my_seq_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="MYSEQ")
@Basic(optional = false)
@Column(name = "id")
private Integer id;

任何人都可以解释什么是错的?
谢谢

我解决了我的问题,但我不知道为什么!我看到allocationSize()的默认值是50:

package javax.persistence;

@Target(value = {ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface SequenceGenerator {

    public String name();

    public String sequenceName() default "";

    public String catalog() default "";

    public String schema() default "";

    public int initialValue() default 1;

    public int allocationSize() default 50;
}

我已将我的Postgres序列increment_by值从1更新为50,现在它可以工作了!

解决方法

将INCREMENT的值从1改为50到我的Postgres序列解决了这个问题.正如@unwichtich所建议的那样,通过@SequenceGenerator注释指定allocationSize = 50属性是个好主意.

Postgresql – Postgres ALTER TABLE的问题

Postgresql – Postgres ALTER TABLE的问题

我在postgre中有一个ALTER TABLE的问题。我想改变varchar列的大小。当我尝试这样做时,它表示视图依赖于该列。我不能放弃视图,因为其他的依赖于它。有什么办法可以把所有的东西都丢下来再重新创建吗?

我刚刚发现一个选项,这是从视图中删除加入表,当我不会更改返回的列时,我可以这样做。但是,仍然有更多的意见需要改变。是不是有什么可以说,它应该推迟和检查与提交?

我遇到这个问题,找不到任何办法。不幸的是,尽可能地告诉我们,必须删除视图,更改基础表上的列类型,然后重新创建视图。这可以完全在单个事务中发生。

限制延期不适用于此问题。换句话说,即使SET CONSTRAINTS ALL DEFERRED也没有影响这个限制。具体来说,约束延迟不适用于打印错误的一致性检查:当尝试更改视图下面的列的类型时,不能更改视图或规则使用的列的类型。

今天关于解决postgresql 序列跳值的问题pgsql设置序列值的讲解已经结束,谢谢您的阅读,如果想了解更多关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、linux系统上解决postgres远程连接不上的问题、postgresql – JPA和Postgres序列预分配大小设置不正确、Postgresql – Postgres ALTER TABLE的问题的相关知识,请在本站搜索。

本文标签:

上一篇Postgresql数据库之创建和修改序列的操作

下一篇PostgreSQL 删除check约束的实现