2024年最新Ubuntu18(13),【大牛系列教学】

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取


![在这里插入图片描述](https://img-blog.csdnimg.cn/20190619204550380.png)  
 配置postgres用户环境变量



#切换至postgres用户
su - postgres
#修改配置文件
vim ~/.profile

添加以下内容和修改PATH

export PGHOME=/usr/local/pgsql
export PGDATA=/var/postgresql/data
export PGHOST=/tmp
export PATH=“ H O M E / b i n : HOME/bin: HOME/bin:HOME/.local/bin: P A T H : PATH: PATH:PGHOME/bin”
export MANPATH= P G H O M E / s h a r e / m a n : PGHOME/share/man: PGHOME/share/man:MANPATH
export LANG=en_US.utf8
export DATE=date +"%Y-%m-%d %H:%M:%S"
export LD_LIBRARY_PATH= P G H O M E / l i b : PGHOME/lib: PGHOME/lib:LD_LIBRARY_PATH
#下面只是启动服务的快捷配置,可不用配置
#alias pg_start=‘pg_ctl start -D $PGDATA’
#alias pg_stop=‘pg_ctl stop -D $PGDATA -m fast’


![在这里插入图片描述](https://img-blog.csdnimg.cn/20190619204746824.png)  
 切换用户后,使用命令psql进入交互式环境:  
 CREATE USER testuser WITH PASSWORD ‘testuser’;


![在这里插入图片描述](https://img-blog.csdnimg.cn/20190619215845921.png)



\q 退出交互式环境
\h 查看所有sql命令
? 查看psql命令
\l 查看数据库
\du 查看所有用户
\dt 查看表
SELECT tablename FROM pg_tables; 查看所有表


##### 三、PostgreSQL进阶配置


###### 安装pgAdmin3图形界面来管理Postgresql



#安装pgadmin3
$sudo apt-get install pgadmin3 #postgresql11安装完毕之后进行安装
#运行pgAdmin3
pgadmin3


###### 添加新用户和新数据库


参考: <https://www.bbsmax.com/A/lk5aYjal51/>  
 <https://blog.csdn.net/lc_2014c/article/details/84189162>


###### 设置远程访问数据库


###### c/c++连接数据库


参考:



> 
> <https://blog.csdn.net/zst126/article/details/2608445> (c++ demo)  
>  <https://blog.csdn.net/s465689853/article/category/7807189> (postgresql从入门到菜鸟)  
>  重点:  
>  [ibpq-PostgreSQL客户端编程接口(一)----libpq中的数据库连接函数](https://bbs.csdn.net/topics/618668825)  
>  [libpq-PostgreSQL客户端编程接口(二)----libpq中的命令执行函数](https://bbs.csdn.net/topics/618668825)
> 
> 
> 


三个模块:  
 整理自:[postgresql从入门到菜鸟(六)libpq连接postgres数据库](https://bbs.csdn.net/topics/618668825)  
 一.获取连接



const char *conninfo;
PGconn *conn;
conninfo = “host=127.0.0.1 port=5433 dbname=smoondb user=postgres”;
conn = PQconnectdb(conninfo);

//判断
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, “Connection to database failed: %s”,
PQerrorMessage(conn));
exit_nicely(conn);//关闭连接并执行清理操作
}


二.执行select语句  
 Lipq执行sql命令的核心函数为PQexec(PGconn \*conn, const char \*command);其中第一个参数为连接。第二个为执行的命令,其中command字符串可以包含多条执行命令,需要注意的是如果不加入begin或者commit的关键字,command字符串中的所有命令将在一个事务中执行,并且只要其中一条失败,就会导致整个command执行失败。  
 PQexec函数的返回类型为PGresult,如果返回值为null,说明执行失败,可以通过PQerrorMessage()方法查看错误消息。


在libpg中,查询语句和更新语句都是通过PQexec函数执行,但是很明显对于这两种语句我们需要的返回值肯定不同,所以在解析PGresult时,libpq提供了不同的解析函数,这部分先说说解析查询结果用到的几个函数


PQnfields(PGresult \*res):用于获取结果集中列的数目  
 PQfname(PGresult \*res,int i):用于获取结果集中列的名称  
 PQntuples(PGresult \*res):用于获取结果集中行的数目  
 PQgetvalue(PGresult \*res,int i,int j):用于获取结果集中i行j列的值



res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database");//为查询语句声明一个游标
if (PQresultStatus(res) != PGRES_COMMAND_OK)//判断游标生成是否成功
{
    fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
    PQclear(res);
    exit_nicely(conn);
}
//这里需要注意不再使用的PGresult需要及时释放,否则可能会造成内存泄漏
PQclear(res);

res = PQexec(conn, "FETCH ALL in myportal");//FETCH ALL表示从结果中取回全部数据
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
    fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
    PQclear(res);
    exit_nicely(conn);
}

// 首先,打印出列名
nFields = PQnfields(res);
for (i = 0; i < nFields; i++)
    printf("%-15s", PQfname(res, i));
printf("\n\n");

// 接下来,打印出行 
for (i = 0; i < PQntuples(res); i++)
{
    for (j = 0; j < nFields; j++)
        printf("%-15s", PQgetvalue(res, i, j));//打印值
    printf("\n");
}

PQclear(res);

三.执行insert,delete,update语句  
 对于select语句,我们在解析PGresult时需要的是结果集,所以在上面调用了以上几个函数,但是修改语句我们更关心的受影响的行数,所以对于修改语句可以通过PQntuples(const PGresult \*res)获取受影响函数,其中对于PGresult而言它的成员中包含了所有执行的结果,不同的解析函数只是用来取得PGresult中相应的成员而已,有兴趣的同学可以去看一看PGresult结构体的实现,里面对于所有的成员都有比较清楚的描述。  
 下面贴一段执行插入语句的例子:



res = PQexec(conn, "delete from student where sid=4;");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
    fprintf(stderr, "delete failed: %s", PQerrorMessage(conn));
    PQclear(res);
    exit_nicely(conn);
}
printf("updatelin:%s",PQcmdTuples(res));//解析并打印受影响行数
PQclear(res);



![img](https://img-blog.csdnimg.cn/img_convert/e64076321c457684eb8052bd5a8524ce.png)
![img](https://img-blog.csdnimg.cn/img_convert/6ce304718c5d012f34e5ccb173eb51c8.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值