GVKun编程网logo

sql – Postgres日期重叠约束

11

最近很多小伙伴都在问sql–Postgres日期重叠约束这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展centos7下源码编译安装php支持PostgreSQLpostgresq

最近很多小伙伴都在问sql – Postgres日期重叠约束这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、PostgreSQL - 禁用约束、postgresql – JBoss日志Postgres驱动程序是“非JDBC兼容的”、postgresql – OS X上的Postgres找不到postgis扩展控制文件等相关知识,下面开始了哦!

本文目录一览:

sql – Postgres日期重叠约束

sql – Postgres日期重叠约束

我有这样的表:
date_start    date_end     account_id    product_id
2001-01-01    2001-01-31   1             1
2001-02-01    2001-02-20   1             1
2001-04-01    2001-05-20   1             1

我想禁止给定的重叠间隔(account_id,product_id)

编辑:我找到了一些东西:

CREATE TABLE test (                                                                                                
    from_ts TIMESTAMPTZ,to_ts TIMESTAMPTZ,account_id INTEGER,product_id INTEGER,CHECK ( from_ts < to_ts ),CONSTRAINT overlapping_times EXCLUDE USING GIST (
        account_id WITH =,product_id WITH =,Box(
            point( extract(epoch FROM from_ts at time zone 'UTC'),extract(epoch FROM from_ts at time zone 'UTC') ),point( extract(epoch FROM to_ts at time zone 'UTC'),extract(epoch FROM to_ts at time zone 'UTC') )
        ) WITH &&
    )
);

如果你想更多地了解这个http://www.depesz.com/2010/01/03/waiting-for-8-5-exclusion-constraints/

我唯一的问题是它不能使用空值作为结束时间戳,我认为用无限值替换它,但不起作用.

解决方法

好的,我最终这样做:
CREATE TABLE test (
    from_ts TIMESTAMPTZ,account_id INTEGER DEFAULT 1,product_id INTEGER DEFAULT 1,period(from_ts,CASE WHEN to_ts IS NULL THEN 'infinity' ELSE to_ts END) WITH &&
    )
);

完美无瑕,交易证明.

我只需要安装临时扩展,这将在postgres 9.2中是本地的,btree_gist可以作为9.1中的扩展CREATE EXTENSION btree_gist;

nb:如果没有空时间戳,那么就不需要使用我可以用我的问题中指定的方框的方法来使用时间扩展.

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 !$ &amp; 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 &gt;./logs/start-log-1.log 2&gt;&amp;1 &amp;
$ ./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
&gt; 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
&gt; Bug #67296 (filter_input doesn''t validate variables) [ext/filter/tests/bug49184.phpt]  XFAIL REASON: See Bug #49184
&gt; Bug #53640 (XBM images require width to be multiple of 8) [ext/gd/tests/bug53640.phpt]  XFAIL REASON: Padding is not implemented yet
&gt; zend multibyte (7) [ext/mbstring/tests/zend_multibyte-07.phpt]  XFAIL REASON: https://bugs.php.net/bug.php?id=66582
&gt; zend multibyte (9) [ext/mbstring/tests/zend_multibyte-09.phpt]  XFAIL REASON: https://bugs.php.net/bug.php?id=66582
&gt;Bug #70470 (Built-in server truncates headers spanning over TCP packets) [sapi/cli/tests/bug70470.phpt]  XFAIL REASON: bug is not fixed yet

## 查阅官方的bug,发现:
&gt; id=66582: status : Closed. Fixed in master (PHP7)
&gt; id=42718: status : Assigned
&gt; id=42718: reference to id=49184, unsolved for many years
## 那就不关心了,直接装吧
$ make install
&gt; 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教程有兴趣的朋友有所帮助。

PostgreSQL - 禁用约束

PostgreSQL - 禁用约束

我有一个大约有 500 万行的表,它有一个引用另一个表的主键的 fk 约束(也大约有 500 万行)。

我需要从两个表中删除大约 75000 行。我知道,如果我尝试在启用 fk 约束的情况下执行此操作,将花费无法接受的时间。

来自 Oracle 背景,我的第一个想法是禁用约束,执行删除,然后重新启用约束。如果我是超级用户(我不是,但我以拥有/创建对象的用户身份登录),PostGres 似乎让我禁用约束触发器,但这似乎不是我想要的。

另一种选择是删除约束,然后恢复它。鉴于我的表的大小,我担心重建约束需要很长时间。

有什么想法吗?

编辑:在比利的鼓励下,我尝试在不改变任何约束的情况下进行删除,这需要超过 10 分钟。但是,我发现我试图从中删除的表有一个自引用外键......重复(& 非索引)。

最终更新 - 我删除了自引用外键,删除并重新添加了它。比利完全正确,但不幸的是我不能接受他的评论作为答案!

答案1

根据之前的评论,这应该是一个问题。也就是说,有一个命令可能正是您想要的——它会将约束设置为延迟,以便在 COMMIT 时检查它们,而不是在每次删除时检查它们。如果您只对所有行进行一次大的 DELETE,它不会有什么不同,但如果您是分段进行的,它会有所不同。

SET CONSTRAINTS ALL DEFERRED

在这种情况下,您正在寻找的是什么。请注意,必须先将约束标记为DEFERRABLE可以延迟。例如:

ALTER TABLE table_name  ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)  DEFERRABLE INITIALLY IMMEDIATE;

然后可以在事务或函数中延迟约束,如下所示:

CREATE OR REPLACE FUNCTION f() RETURNS void AS$BODY$BEGIN  SET CONSTRAINTS ALL DEFERRED;  -- Code that temporarily violates the constraint...  -- UPDATE table_name ...END;$BODY$  LANGUAGE plpgsql VOLATILE  COST 100;

postgresql – JBoss日志Postgres驱动程序是“非JDBC兼容的”

postgresql – JBoss日志Postgres驱动程序是“非JDBC兼容的”

我将JBoss服务器连接到一个新的Postgres数据库.

在standalone.xml中:

<driver name="postgresql" module="com.postgresql.pgjdbc">
    <driver-class>org.postgresql.Driver</driver-class>
</driver>

在module.xml中:

<module xmlns="urn:jboss:module:1.1" name="com.postgresql.pgjdbc">
    <resources>
        <resource-root path="postgresql-9.3-1102.jdbc41.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

启动JBoss时,我得到以下日志条目:

10:49:57,206 INFO  [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 25) JBAS010404: deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.3)

驱动程序确实似乎连接和工作.这种违规行为会产生什么影响?

解决方法

根据这个JBoss论坛条目无: Why is my JDBC4-compliant driver loaded as “non-JDBC-compliant”?

Because org.postgresql.Driver#jdbcCompliant() returns false. So you
can ignore that for Now,and I’m sure that the Postgresql JDBC people
would like code contributions

和源代码:

/**
* Report whether the driver is a genuine JDBC compliant driver. A
* driver may only report "true" here if it passes the JDBC compliance
* tests,otherwise it is required to return false. JDBC compliance
* requires full support for the JDBC API and full support for sql 92
* Entry Level.
*
* <p>For Postgresql,this is not yet possible,as we are not sql92
* compliant (yet).
*/
public boolean jdbcCompliant()
{
    return false;
}

https://github.com/pgjdbc/pgjdbc/blob/REL9_3_1102/org/postgresql/Driver.java.in

这是Todo清单http://jdbc.postgresql.org/development/todo.html#Compliance的一部分

postgresql – OS X上的Postgres找不到postgis扩展控制文件

postgresql – OS X上的Postgres找不到postgis扩展控制文件

使用mac OSX Yosemite 10.10.1.我用自制软件卸载并重新安装了postgres和postgis.我知道postgres正在查找postgis控制文件的错误位置.还注意到’哪个psql’路径似乎不正确.我如何/在哪里解决这个问题?

Psql

(9.4.0,server 9.3.5)

ERROR:  Could not open extension control file "/usr/local/Cellar/postgresql/9.3.5_1/share/postgresql/extension/postgis.control": No such file or directory

找到/ usr -name postgis.control

/usr/local/Cellar/postgresql/9.4.0/share/postgresql/extension/postgis.control

哪个psql

/usr/local/bin/psql

哪个pg_config

/usr/local/bin/pg_config

brew info postgis

postgis: stable 2.1.5,HEAD
http://postgis.net
/usr/local/Cellar/postgis/2.1.5 (45 files,8.6M) *
  Built from source
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/postgis.rb

brew info postgres

postgresql: stable 9.4.0 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.4.0 (3049 files,74M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/postgresql.rb

.bashrc和.bash_profile都有

export PGDATA='/usr/local/Cellar/postgresql/9.4.0/bin/postgres'
alias postgres-log='cd /usr/local/var/postgres/ && subl server.log'

mdfind -name“postgres”| grep -G“postgres $”

/usr/local/Cellar/postgresql/9.4.0/bin/postgres
/usr/local/var/postgres
/Users/lionelramos/macports/var/macports/sources/rsync.macports.org/release/tarballs/ports/ruby/rb-postgres

看起来除了自制软件版本之外,我还有不同的postgres本地版本.

我是如何解决我的问题的:

>我使用brew卸载postgres 9.3.5_1卸载了postgres 9.3.5_1.
>我用brew卸载postgis卸载了postgis
>确保我只使用brew信息postgres安装了postgres 9.4
>确保psql命令有效.
>我用brew install postgis重新安装了postgis.

这解决了我的问题.如果您遇到第4步的问题,则可能需要使用initdb或createdb命令来创建所需的数据库.

我们今天的关于sql – Postgres日期重叠约束的分享就到这里,谢谢您的阅读,如果想了解更多关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、PostgreSQL - 禁用约束、postgresql – JBoss日志Postgres驱动程序是“非JDBC兼容的”、postgresql – OS X上的Postgres找不到postgis扩展控制文件的相关信息,可以在本站进行搜索。

本文标签: