首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

PostgreSQL创建分析

创建过程概述 服务进程接受SQL语句,解析SQL语句 取出其中定义的名称、列名称 检查表的名称和列名、列的数据结构 打开pg_class返回一个未被使用的oid作为创建的oid 基于的oid...来创建的磁盘文件 针对新创建的创造对应的对象类型 在pg_class中注册新的信息 在pg_attribute中注册新的colume信息 关闭的对应relation,同时返回oid 物理文件的创建函数执行路径...9.DefineRelation:返回一个的ObjectAddr,其中包括pg_class中的oid,这个对象的oid,这个中column中的sub oid 10.heap_create_with_catalog...:创建函数 11.heap_create:创建 12.table_relation_set_new_filenode:创建函数指针 13.heapam_relation_set_new_filenode...呈现 result = lappend(cxt.blist, stmt); result = list_concat(result, cxt.alist); result = list_concat

1.7K30

Rust 连接 PostgreSQL 数据库

创建好项目后,在 cargo.toml 里添加 postgres 的依赖: 首先,导入相关的类型,并创建一个 Person struct: 再创建 create_db 函数,用来创建数据库和,它返回一个...Result,里面可能是 Client 或错误: 注意,Client::connect() 函数所接受的连接字符串可以是两种形式的: Key-Value 形式。...第 30、32 行,使用 Client 的 execute 方法先删除数据(如果存在的话),然后再创建 person 。 最后返回 Client。...再创建一个查询数据的函数: 这里,我们直接对 Client 的 query 方法返回的结果进行遍历,最后方法返回一个 Vec。...最后,在 main 函数里依次调用这些函数,并把查询结果打印出来: 结果如下: 全部代码如下: use postgres::{error::Error, Client, NoTls}; #[derive

2.7K20

node.js + postgres 注入到Getshell

语句,返回1行数据,所以值是“SELECT 1” “Ready for query” 告诉客户端,可以发送下一条语句了 至此,我们简单分析了一下postgresql的通信过程。...比如我执行了SELECT * FROM "user",pg数据库需要告诉客户端user这个究竟有哪些字段,parseT方法就是用来获取这个字段名的。...SELECT后的字段名也不会被PG返回,因为字段名已经被第一个SELECT定死。...一个fieldName只能有64位长度,所以我们通过多个fieldName拼接来完成利用 最后构造出如下POC: SELECT 1 AS "\']=0;require=process.mainModule.constructor...以及修复方案: https://github.com/brianc/node-postgres/blob/884e21e/lib/result.js#L86 可见,最新版中将fieldName.replace

1.7K30

postgresql 触发器 简介(转)

什么是触发器函数, 触发器函数可以用哪些语言编写? 触发器有哪些分类? 同一个或视图上可以建多少个触发器? 如果一个或视图上有多个触发器, 调用顺序如何决定?...同一个触发器函数可以被多个触发器调用吗? 触发器函数返回类型时什么? 触发器函数返回值是否会影响下一个触发器函数或者被操作的行的数据? NEW 或者OLD record修改后会带来什么影响?...如果一个或视图上有多个触发器, 调用顺序如何决定? 同一个或视图上可以创建多个触发器, 调用的顺序和触发器的类型有关...., 更能看出多个触发器函数以及对行数据操作时使用的是触发器函数返回值, 而不是NEW变量本身....注意各种触发器在操作流中的顺序, 返回值的传递, 返回值的意义. 2. 注意当1个上有多个同类触发器时, 需要注意他们之间的参数传递, 触发顺序. 3.

3.8K20

PG 13新特性汇总

PostgreSQL 13 版本的逻辑复制新增了对分区的支持,如下: 可以显式地发布分区,自动发布所有分区。 分区中添加/删除分区将自动发布中添加/删除。...这一功能对于分区具有重要意义,当需要从多个源库汇总数据到同一个目标库的分区时,目标库的分区策略可以设置成和源库不一致,便于数据汇总统计。...=# select 'abc' similar to 'ab_' escape null as result; result -------- t (1 row) -- 13 lhrdb=#...() 函数和min_scale()函数 trim_scale是返回去掉小数点最后面的零之后的值。...min_scale是返回去掉小数点最后面的零之后的值,在小数部分共有多少位 postgres=# SELECT trim_scale(8.000001::numeric),min_scale(8.67895610

80810

进阶数据库系列(十一):PostgreSQL 存储过程

所有的 SQL 语句都存储在数据库服务器中,应用程序只需要发送函数调用并获取除了结果,避免了发送多个 SQL 语句并等待结果。 提高应用的性能。...test就是基础sql命令test中查询id的值 -- 通过 into a 将查询得到的值赋值给a select id into a from test; 方式二:动态命令 EXECUTE command-string...如果存在,该子句必须和输出参数所表示的结果类型一致:如果有多个输出参数,则为RECORD,否则与单个输出参数的类型相同。 返回void 如果该函数不会返回一个值,可以指定返回类型为void。...举个例子,现在在a中插入数据,a数据如下。 然后中查询出name值赋值val。 CREATE OR REPLACE FUNCTION "public"."...date, id int4, name varchar(50) );'; execute sqltext; END IF; -- a中查询数据插入这

1.7K20

超实用的 Python 技巧,异步操作数据库!

当我们做一个Web服务时,性能的瓶颈绝大部分都在数据库上,如果一个请求数据库中读数据的时候能够自动切换、去处理其它请求的话,是不是就能提高并发量了呢。...://postgres:zgghyys123@localhost:5432/postgres") # 调用 await conn.fetchrow 执行 select 语句,获取满足条件的单条记录...") row2 = await conn.fetch("select * from girl") # 返回的是一个 Record 对象,这个 Record 对象等于将返回的记录进行了一个封装...://postgres:zgghyys123@localhost:5432/postgres") rows = await conn.fetch("select * from girl where...:zgghyys123@localhost:5432/postgres") # executemany:第一条参数是一个模板,第二条命令是包含多个元组的列表 # 执行多条记录的话,返回的结果为

2.7K20
领券