原创

PostgreSQL-PgSQL-ubuntu乌班图安装psql10和timescaledb时序数据库扩展

1. 安装psql10

注意其他版本的包库里基本没有,按官方的文档操作也不行,另一种可能方案要用源码执行makeinstall编译安装。

关于root、ubuntu及后面生成的postgres用户名密码的重置逻辑

从ubuntu账号sudo -i -u postgres进入到postgres账号下,想要切换到root下,先执行exit,回到ubuntu,再执行sudo -i进入root

重置系统账号密码:

先su root(需要先重置下)
passwd ubuntu
passwd postgres

重置数据库账号密码:

先su root
再su postgres
psql
\password postgres
这里收入密码
\q 退出

整体教程:
https://blog.csdn.net/u011376317/article/details/145682298

1.1 整体步骤

sudo apt update【只执行1次,有问题也不要做什么调整】

被mysql卡主,就执行sudo systemctl stop mysql

sudo apt install postgresql-10 postgresql-contrib-10 
或者,最新的好像就是10
sudo apt install postgresql postgresql-contrib
遇到mysql的安装问题就Ctrl C,会跳过

如果要把数据盘放在非系统盘上(【未测试】如果软件安装位置也要移动的话,要从源码包开始编译)
      以下过程会重置数据库postgres的用户密码、数据库配置设置、数据库数据
        df -h
            挂载点为 / 的那一行,这就是你的系统盘【基本就是选择1个空间大的路径,要用mounted on 下的路径名,不要fileSystem】
        sudo mkdir -p /mnt/pgdata/pgdata10
        sudo chown -R postgres:postgres /mnt/pgdata/pgdata10
        sudo chmod 700 /mnt/pgdata/pgdata10
        sudo -u postgres /usr/lib/postgresql/10/bin/initdb -D /mnt/pgdata/pgdata10
        su postgres【这里用su root, passwd postgres修改密码】
        或者 sudo -i -u postgres(不要密码,另外sudo -i 是到root下) 

        //应该是错误的 这里已经不生效了。vi /etc/postgresql/10/main/postgresql.conf
        //    data_directory = '/mnt/pgdata/pgdata10'  大约第41行


        【关键】
        【先安转timescaledb,再和这里一步到位修改】
        /mnt/pgdata/pgdata10这个文件夹下有postgresql.conf、pg_hba.conf,在这里的位置的文件中分别设置data_directory45应该会默认当前盘+listen_addresses 59+shared_preload_libraries 145、IPv4。

        vi /mnt/pgdata/pgdata10/postgresql.conf 、pg_hba.conf

        systemctl start postgresql
        systemctl restart postgresql 
        systemctl enable postgresql 开机启动
        systemctl status postgresql

        验证数据库盘文件夹大小
        cd /mnt/pgdata/pgdata10/ 
          建表前后 
        du ./base/ 文件夹大小 (最下面的是总和)或 du -s ./base/ 或 du -sh ./base/ (分别是求和,求和并按M单位显示)
            7484    ./base/13017
            7484    ./base/13016
            7484    ./base/1
            22456   ./base/

          直接写入15w条   
          DO $$
          DECLARE
              i INT;
          BEGIN
              FOR i IN 1..150000 LOOP
                  INSERT INTO test_conditions (time, location, temperature, humidity)
                  VALUES ('2025-03-20 17:39:11+08', '1', '2', '3');
              END LOOP;
          END $$;

            SHOW data_directory;  直接查看数据盘


开始重置密码
sudo su postgres
psql 进入命令行

设置密码:
#】ALTER USER postgres PASSWORD '你的新密码'; 必须要;结尾
应该用 
\password postgres
收入密码后
\q 退出

【重要】
 ps -ef | grep postgres 能看到实际的配置的,就是默认的配置还是读取的老的,反正两个都改下
/usr/lib/postgresql/10/bin/postgres -D /userdata/pgdata10 -c config_file=/etc/postgresql/10/main/postgresql.conf

设置所有的ip可访问
vi /etc/postgresql/10/main/postgresql.conf
和 vi /mnt/pgdata/pgdata10/postgresql.conf【也要改,应该默认都是读取老路径配置,反正都改下】
放开下面的配置,并修改为*,大约在59行,
显示行号 :set number
listen_addresses = '*'

vi /etc/postgresql/10/main/pg_hba.conf
或 vi /mnt/pgdata/pgdata10/pg_hba.conf【看是否移动了数据盘】
在
==IPv4 local connections:==
下面的网段ADDRESS改成0.0.0.0/0
注意,并不是文件的末尾。

重启psql
systemctl restart postgresql
systemctl enable postgresql
虚入 ubuntu用户名的密码

验证上面的密码和ip访问问题:
su postgres
//验证 密码
psql -h 127.0.0.1 -p 5432 -U postgres
//验证 IP
psql -h 192.168.137.116 -p 5432 -U postgres
如果这里提示密码不对或Connection refused,就是端口不同,用telnet验证。
sudo ss -tuln | grep 5432 确认当前端口的可允许ip来源,需要变成 0.0.0.0:5432 
tcp    LISTEN   0        0               127.0.0.1:5432           0.0.0.0:*
tcp    LISTEN   0        0                   [::1]:5432                 *:*

这里的127.0.0.1:5432表示,只接受本地连接,说明修改的配置没生效。
新老配置的都改下,包括data_directory,再重启,实际看ps -ef | grep postgres 来看还是使用老的配置文件路径。

2. 安装timescaledb扩展

整体参考
https://blog.csdn.net/qq_36357820/article/details/103386892

https://docs.timescale.com/v1.3/getting-started/installation

2.1 整体步骤


//git clone https://github.com/timescale/timescaledb.git

apt-get install cmake
好像又没有1.3.2版本
git clone --branch 1.3.x https://gitee.com/inlench/timescaledb

cd timescaledb

git checkout 1.3.2 必要

git branch

下一步./bootstrap 如果有报错,
sudo apt-get install libpq-dev
sudo apt-get install libssl-dev

开始执行安转
./bootstrap

下一步make如果出错 fatal error: postgres.h: No such file or directory;
sudo apt-get install postgresql-server-dev-10
这一步如果提示存在源之类的问题,可以尝试

    重命名那个报错的源文件 或尝试:

    sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

    sudo apt-get update

cd build && make

make install

然后修改psql的配置

su postgres 或者 sudo -i -u postgres(不要密码,另外sudo -i 是到root下) 

vi /etc/postgresql/10/main/postgresql.conf
或 vi /mnt/pgdata/pgdata10/postgresql.conf 【看是否移动了数据盘】
找到并修改,可用/ 和 :set number配合找到:大约145行
shared_preload_libraries = 'timescaledb'

最后重启psql
systemctl restart postgresql
systemctl enable postgresql 【开机启动】

如果出现
问题1:
 Using pg_config /usr/bin/pg_config
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
-- Compiling against PostgreSQL version .
CMake Error at CMakeLists.txt:173 (message):

sudo apt-get install libpq-dev


问题2:
-- Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR)
CMake Error at CMakeLists.txt:303 (message):
  TimescaleDB requires OpenSSL but it wasn't found.  If you want to continue
  without OpenSSL, re-run bootstrap with `-DUSE_OPENSSL=0`

sudo apt-get install libssl-dev

3. 测试

默认的db就是public

//如果需要新建
CREATE database tutorial;
//进入
\c tutorial

创建扩展
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

验证
SELECT * FROM pg_extension WHERE extname = 'timescaledb';

CREATE TABLE test_conditions (
  time        TIMESTAMPTZ       NOT NULL,
  location    TEXT              NOT NULL,
  temperature DOUBLE PRECISION  NULL,
  humidity    DOUBLE PRECISION  NULL
);

INSERT INTO test_conditions (time, location, temperature, humidity) VALUES ('2025-03-18 17:39:11+08', '1', '2', '3');
INSERT INTO test_conditions (time, location, temperature, humidity) VALUES ('2025-03-19 17:39:11+08', '1', '2', '3');
INSERT INTO test_conditions (time, location, temperature, humidity) VALUES ('2025-03-20 17:39:11+08', '1', '2', '3');

SELECT * from test_conditions;

-- 删除超表,先备份数据 DROP TABLE test_conditions CASCADE;

select create_hypertable('test_conditions', 'time', chunk_time_interval=> interval '1 seconds', associated_table_prefix=>'_test_conditions', migrate_data => true);

执行删除
select drop_chunks(interval '5 seconds', 'test_conditions');
正文到此结束
本文目录