postgreSQL usage

whether database existence

SELECT u.datname  FROM pg_catalog.pg_database u where u.datname='rftDatabase';

表是否存在

if( (select 1 from pg_class where relname='test'::name and relkind='r') is null  ) then
/*你的代码*/
end if;

docker with postgreSQL

office docker

docker pull postgres

// start a postgres instance
docker run --name pool-postgres -p 5432:5432 -e POSTGRES_PASSWORD=password -d postgres

Postgres SQL server 9.6.9 源码编译

sudo apt-get install libreadline-dev
./configure
make
sudo make install
sudo adduser postgres
sudo mkdir /usr/local/pgsql/data
sudo chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test

设置开机自启动

PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下
chmod a+x linux
cp linux /etc/init.d/postgresql
修改/etc/init.d/postgresql文件的两个变量
prefix设置为postgresql的安装路径:/xxx/pgsql
PGDATA设置为postgresql的数据目录路径:/xxx/pgsql/data

启动PostgreSQL服务
service postgresql start

设置postgresql服务开机自启动
sudo apt install sysv-rc-conf

sysv-rc-conf postgresql

常用命令

启动服务

su - postgres
/usr/local/pgsql/bin/pg_ctl -s -D /usr/local/pgsql/data start -w -t 120

控制台

进入控制台
/usr/local/pgsql/bin/psql

退出控制台
\q

创建用户

CREATE USER gitea WITH PASSWORD '36^0j0^CWzl%';

数据库相关操作

创建数据库
CREATE DATABASE pooldb OWNER poolAdmin;
赋予权限
GRANT ALL PRIVILEGES ON DATABASE pooldb to poolAdmin;

查看数据库
\l

切换数据库
\c databasename

登录数据库
/usr/local/pgsql/bin/psql -U backend -d testdb8 -h 127.0.0.1 -p 5432

查看当前库的表

\d
显示表具体信息
\d table_name

其他命令

\h:查看SQL命令的解释,比如\h select。
\?:查看psql命令列表。
\l:列出所有数据库。
\c [database_name]:连接其他数据库。
\d:列出当前数据库的所有表格。
\d [table_name]:列出某一张表格的结构。
\du:列出所有用户。
\e:打开文本编辑器。
\conninfo:列出当前数据库和连接的信息。

# 创建新表
CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);

# 插入数据
INSERT INTO user_tbl(name, signup_date) VALUES('张三', '2013-12-22');

# 选择记录
SELECT * FROM user_tbl;

# 更新数据
UPDATE user_tbl set name = '李四' WHERE name = '张三';

# 删除记录
DELETE FROM user_tbl WHERE name = '李四' ;

# 添加栏位
ALTER TABLE user_tbl ADD email VARCHAR(40);

# 更新结构
ALTER TABLE user_tbl ALTER COLUMN signup_date SET NOT NULL;

# 更名栏位
ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;

# 删除栏位
ALTER TABLE user_tbl DROP COLUMN email;

# 表格更名
ALTER TABLE user_tbl RENAME TO backup_tbl;

# 删除表格
DROP TABLE IF EXISTS backup_tbl;