GVKun编程网logo

在PostgreSQL中计算并节省空间

15

在本文中,我们将带你了解在PostgreSQL中计算并节省空间在这篇文章中,同时我们还将给您一些技巧,以帮助您实现更有效的centos7下源码编译安装php支持PostgreSQLpostgresql

在本文中,我们将带你了解在PostgreSQL中计算并节省空间在这篇文章中,同时我们还将给您一些技巧,以帮助您实现更有效的centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、PostgreSQL 11.8版是否支持导入在PostgreSQL 8.4.20版中创建的数据库?、postgresql – Docker – 如何在postgres容器中运行psql命令?、postgresql – 在postgres上使用索引选择慢sql

本文目录一览:

在PostgreSQL中计算并节省空间

在PostgreSQL中计算并节省空间

我在pg中有一个表格,如下所示:

CREATE TABLE t (
    a BIGSERIAL NOT NULL,-- 8 b
    b SMALLINT,-- 2 b
    c SMALLINT,-- 2 b
    d REAL,-- 4 b
    e REAL,-- 4 b
    f REAL,-- 4 b
    g INTEGER,-- 4 b
    h REAL,-- 4 b
    i REAL,-- 4 b
    j SMALLINT,-- 2 b
    k INTEGER,-- 4 b
    l INTEGER,-- 4 b
    m REAL,-- 4 b
    CONSTRAINT a_pkey PRIMARY KEY (a)
);

上面每行最多增加50个字节。我的经验是,我还需要40%到50%的系统开销,甚至没有用户创建的上述索引。因此,每行大约75个字节。表中将有很多行,可能超过1450亿行,因此表将推13-14 TB。我可以使用什么技巧来压缩这张桌子?我下面可能的想法…

real值转换为integer。如果它们可以存储为smallint,则每个字段节省2个字节。

将b .. m列转换为数组。我不需要搜索这些列,但是我确实需要能够一次返回一个列的值。因此,如果我需要g列,我可以做类似的事情

SELECT a,arr[5] FROM t;

我可以使用array选项节省空间吗?会有速度限制吗?

还有其他想法吗?

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教程有兴趣的朋友有所帮助。

PostgreSQL 11.8版是否支持导入在PostgreSQL 8.4.20版中创建的数据库?

PostgreSQL 11.8版是否支持导入在PostgreSQL 8.4.20版中创建的数据库?

您需要还原您的转储文件,因此您应该将其提供给pg_restore

尽管pg_restore将尽最大努力正确地阅读和解释8.4转储,但建议的做法是从v11中使用pg_dump转储8.4数据库。

postgresql – Docker – 如何在postgres容器中运行psql命令?

postgresql – Docker – 如何在postgres容器中运行psql命令?

我想在postgres图像中使用psql,以便在数据库上运行一些查询。
但不幸的是,当我附加到postgres容器时,我得到了错误,找不到psql命令…

对我来说,如何在容器中运行postgre SQL查询或命令是一个谜。

如何在postgres容器中运行psql命令? (我是Docker世界的新人)

我使用Ubuntu作为主机,我没有在主机上安装postgres,而是使用postgres容器。

docker-compose ps
        Name                       Command               State               Ports            
---------------------------------------------------------------------------------------------
yiialkalmi_app_1        /bin/bash                        Exit 0                               
yiialkalmi_Nginx_1      Nginx -g daemon off;             Up       443/tcp,0.0.0.0:80->80/tcp 
yiialkalmi_PHP_1        PHP-fpm                          Up       9000/tcp                    
yiialkalmi_postgres_1   /docker-entrypoint.sh postgres   Up       5432/tcp                    
yiialkalmi_redis_1      docker-entrypoint.sh redis ...   Up       6379/tcp

这里的容器:

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
315567db2dff        yiialkalmi_Nginx    "Nginx -g 'daemon off"   18 hours ago        Up 3 hours          0.0.0.0:80->80/tcp,443/tcp   yiialkalmi_Nginx_1
53577722df71        yiialkalmi_PHP      "PHP-fpm"                18 hours ago        Up 3 hours          9000/tcp                      yiialkalmi_PHP_1
40e39bd0329a        postgres:latest     "/docker-entrypoint.s"   18 hours ago        Up 3 hours          5432/tcp                      yiialkalmi_postgres_1
5cc47477b72d        redis:latest        "docker-entrypoint.sh"   19 hours ago        Up 3 hours          6379/tcp                      yiialkalmi_redis_1

这是我的docker-compose.yml:

app:
image: ubuntu:16.04
volumes:
    - .:/var/www/html

Nginx:
    build: ./docker/Nginx/
    ports:
        - 80:80
    links:
        - PHP
    volumes_from:
        - app
    volumes:
        - ./docker/Nginx/conf.d:/etc/Nginx/conf.d

PHP:
    build: ./docker/PHP/
    expose:
        - 9000
    links:
        - postgres
        - redis
    volumes_from:
        - app

postgres:
    image: postgres:latest
    volumes:
        - /var/lib/postgres
    environment:
        POSTGRES_DB: project
        POSTGRES_USER: project
        POSTGRES_PASSWORD: project

redis:
    image: redis:latest
    expose:
        - 6379
docker exec -it yiialkalmi_postgres_1 psql -U project -W project project

一些解释

> docker exec -it
用于向正在运行的容器运行命令的命令。它标志打开一个交互式tty。基本上它会导致连接到终端。如果你想打开bash终端,你可以这样做

docker exec -it yiialkalmi_postgres_1 bash

> yiialkalmi_postgres_1
容器名称(您可以使用容器ID,在您的情况下将是40e39bd0329a)
> psql -U项目-W项目
执行到正在运行的容器的命令
> U用户
> W密码
>投影要连接的数据库。

这些是你在这里指定的

environment:
    POSTGRES_DB: project
    POSTGRES_USER: project
    POSTGRES_PASSWORD: project

postgresql – 在postgres上使用索引选择慢sql

postgresql – 在postgres上使用索引选择慢sql

我有一个生产数据库,使用londist复制到另一个主机.表格看起来像

# \d+ usermessage
               Table "public.usermessage"
  Column       |       Type        | Modifiers | Description
-------------------+-------------------+-----------+-------------
 id                | bigint            | not null  |
 subject           | character varying |           |
 message           | character varying |           |
 read              | boolean           |           |
 timestamp         | bigint            |           |
 owner             | bigint            |           |
 sender            | bigint            |           |
 recipient         | bigint            |           |
 dao_created       | bigint            |           |
 dao_updated       | bigint            |           |
 type              | integer           |           |
 replymessageid    | character varying |           |
 originalmessageid | character varying |           |
 replied           | boolean           |           |
 mheader           | boolean           |           |
 mbody             | boolean           |           |
Indexes:
"usermessage_pkey" PRIMARY KEY,btree (id)
"usermessage_owner_key" btree (owner)
"usermessage_recipient_key" btree (recipient)
"usermessage_timestamp_key" btree ("timestamp")
"usermessage_type_key" btree (type)
Has OIDs: no

如果在复制的数据库上执行,则select正如预期的那样快,如果在生产主机上执行它会非常慢.为了让事情变得更奇怪,并非所有时间戳都很慢,其中一些时间戳在两台主机上都很快.生产主机后面的文件系统和存储很好,而且没有大量使用.有任何想法吗?

replication# explain analyse SELECT COUNT(id) FROM usermessage WHERE owner = 1234567 AND timestamp > 1362077127010;
                                                                 QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=263.37..263.38 rows=1 width=8) (actual time=0.059..0.060 rows=1 loops=1)
   ->  Bitmap Heap Scan on usermessage  (cost=259.35..263.36 rows=1 width=8) (actual time=0.055..0.055 rows=0 loops=1)
         Recheck Cond: ((owner = 1234567) AND ("timestamp" > 1362077127010::bigint))
         ->  BitmapAnd  (cost=259.35..259.35 rows=1 width=0) (actual time=0.054..0.054 rows=0 loops=1)
               ->  Bitmap Index Scan on usermessage_owner_key  (cost=0.00..19.27 rows=241 width=0) (actual time=0.032..0.032 rows=33 loops=1)
                     Index Cond: (owner = 1234567)
               ->  Bitmap Index Scan on usermessage_timestamp_key  (cost=0.00..239.82 rows=12048 width=0) (actual time=0.013..0.013 rows=0 loops=1)
                     Index Cond: ("timestamp" > 1362077127010::bigint)
 Total runtime: 0.103 ms
(9 rows)

production#  explain analyse SELECT COUNT(id) FROM usermessage WHERE owner = 1234567 AND timestamp > 1362077127010;
                                                                        QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=267.39..267.40 rows=1 width=8) (actual time=47536.590..47536.590 rows=1 loops=1)
   ->  Bitmap Heap Scan on usermessage  (cost=263.37..267.38 rows=1 width=8) (actual time=47532.520..47536.579 rows=3 loops=1)
         Recheck Cond: ((owner = 1234567) AND ("timestamp" > 1362077127010::bigint))
         ->  BitmapAnd  (cost=263.37..263.37 rows=1 width=0) (actual time=47532.334..47532.334 rows=0 loops=1)
               ->  Bitmap Index Scan on usermessage_owner_key  (cost=0.00..21.90 rows=168 width=0) (actual time=0.123..0.123 rows=46 loops=1)
                     Index Cond: (owner = 1234567)
               ->  Bitmap Index Scan on usermessage_timestamp_key  (cost=0.00..241.22 rows=12209 width=0) (actual time=47530.255..47530.255 rows=5255617 loops=1)
                     Index Cond: ("timestamp" > 1362077127010::bigint)
 Total runtime: 47536.668 ms
(9 rows)

解决方法

我不太熟悉postgresql而不是MysqL但是

(实际时间= 0.013..0.013行= 0循环= 1)

(实际时间= 47530.255..47530.255行= 5255617循环= 1)

建议我的生产数据库有更多的数据,因为行数差别很大.

今天关于在PostgreSQL中计算并节省空间的讲解已经结束,谢谢您的阅读,如果想了解更多关于centos 7下源码编译安装php支持PostgreSQL postgresql手册 postgresql官网下载 postgresql视频教、PostgreSQL 11.8版是否支持导入在PostgreSQL 8.4.20版中创建的数据库?、postgresql – Docker – 如何在postgres容器中运行psql命令?、postgresql – 在postgres上使用索引选择慢sql的相关知识,请在本站搜索。

本文标签: