- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
使用pg的内部数据类型将对象oid转为对象名,可以简化一些系统视图的关联查询.
可以用以下数据库类型转换对应类型的oid(以pg12为例) 。
postgres=# select typname from pg_type where typname ~ '^reg';
typname
---------------
regclass
regconfig
regdictionary
regnamespace
regoper
regoperator
regproc
regprocedure
regrole
regtype
(10 rows)
对象名称 | 类型 | 转换规则 |
---|---|---|
pg_class | regclass | pg_class.oid::regclass |
pg_ts_dict | regdictionary | pg_ts_dict.oid::regdictionary |
pg_namespace | regnamespace | pg_namespace.oid::regnamespace |
pg_operator | regoperator | pg_operator.oid::regoperator |
pg_proc | regproc | pg_proc.oid::regproc |
pg_roles pg_user |
regrole | pg_roles.oid::regrole pg_user.usesysid::regrole |
pg_type | regtype | pg_type.oid::regtype |
以下几个类型暂不确定用途,待研究: | ||
regprocedure | ||
regoper | ||
regconfig |
psql -U postgres
create user test password 'test';
create database testdb with owner=test;
\c testdb
CREATE SCHEMA AUTHORIZATION test;
psql -U test -d testdb
create table test_t1(id int);
create table test_t2(id int);
create table test_t3(id int);
基于如上测试数据,查询test模式下有哪些表,以及表的owner 。
传统表关联的方式使用以下SQL,关联pg_class、pg_namespace、pg_roles/pg_user 。
psql -U test -d testdb
-- 查询用户关联pg_user查询
SELECT
t3.nspname AS SCHEMA,
t1.relname AS tablename,
t2.usename AS OWNER
FROM
pg_class t1
JOIN pg_user t2 ON t1.relowner = t2.usesysid
JOIN pg_namespace t3 ON t1.relnamespace = t3.OID
WHERE
t1.relkind = 'r'
AND t3.nspname = 'test';
schema | tablename | owner
--------+-----------+-------
test | test_t1 | test
test | test_t2 | test
test | test_t3 | test
(3 rows)
-- 查询用户关联pg_roles查询
SELECT
t3.nspname AS SCHEMA,
t1.relname AS tablename,
t2.rolname AS OWNER
FROM
pg_class t1
JOIN pg_roles t2 ON t1.relowner = t2.oid
JOIN pg_namespace t3 ON t1.relnamespace = t3.OID
WHERE
t1.relkind = 'r'
AND t3.nspname = 'test';
schema | tablename | owner
--------+-----------+-------
test | test_t1 | test
test | test_t2 | test
test | test_t3 | test
(3 rows)
如上为了实现查询效果需要关联三张表,查询比较繁琐,如果使用对象转换就很简单了,如下:
psql -U test -d testdb
SELECT
relnamespace :: REGNAMESPACE AS SCHEMA,
relname AS tablename,
relowner :: REGROLE AS OWNER
FROM
pg_class
WHERE
relnamespace :: REGNAMESPACE :: TEXT = 'test'
AND relkind = 'r';
schema | tablename | owner
--------+-----------+-------
test | test_t1 | test
test | test_t2 | test
test | test_t3 | test
(3 rows)
对象类型 | 转换规则 |
---|---|
table | '表名'::regclass::oid |
function/procedure | '函数名/存储过程名'::regproc::oid |
schema | '模式名'::regnamespace::oid |
user/role | '用户名/角色名'::regrole::oid |
type | '类型名称'::regtype::oid |
表转换 。
drop table if exists test_t;
create table test_t(id int);
postgres=# select oid from pg_class where relname = 'test_t';
oid
-------
16508
(1 row)
postgres=# select 'test_t'::regclass::oid;
oid
-------
16508
(1 row)
函数转换 。
CREATE OR REPLACE FUNCTION test_fun(
arg1 INTEGER,
arg2 INTEGER,
arg3 TEXT
)
RETURNS INTEGER
AS $$
BEGIN
RETURN arg1 + arg2;
END;
$$ LANGUAGE plpgsql;
postgres=# select oid,proname from pg_proc where proname = 'test_fun';
oid | proname
-------+----------
16399 | test_fun
(1 row)
postgres=# select 'test_fun'::regproc::oid;
oid
-------
16399
(1 row)
模式转换 。
create schema test_schema;
postgres=# select oid,nspname from pg_namespace where nspname='test_schema';
oid | nspname
-------+-------------
16511 | test_schema
(1 row)
postgres=# select 'test_schema'::regnamespace::oid;
oid
-------
16511
(1 row)
用户/角色 。
create user test_user;
postgres=# select usesysid,usename from pg_user where usename='test_user';
usesysid | usename
----------+-----------
16512 | test_user
(1 row)
postgres=# select 'test_user'::regrole::oid;
oid
-------
16512
(1 row)
类型 。
CREATE TYPE type_sex AS ENUM ('male', 'female');
postgres=# select oid,typname from pg_type where typname='type_sex';
oid | typname
-------+----------
16514 | type_sex
(1 row)
postgres=# select 'type_sex'::regtype::oid;
oid
-------
16514
(1 row)
最后此篇关于PostgreSQL中将对象oid和对象名相互转换的文章就讲到这里了,如果你想了解更多关于PostgreSQL中将对象oid和对象名相互转换的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在发送 SNMP getBulkRequest ,使用基于一些 3rd 方库(如 agent++、snmp++ 等)的专有 SNMP 浏览器,具有多个 OID,例如 .1.3.6.1.2.1.1.
我正在尝试使用两个不同的上下文名称来实现一个 snmp 代理。我得到了一些示例程序。这是我的代理端代码的样子。我从 snmplabs.com 得到的.我试图实现它,但在执行 snmpwalk 时遇到了
我尝试创建自定义 SNMP oid(和脚本)。 我将以下行添加到 snmpd.conf(并重新启动服务): pass .1.3.6.1.3.2 /bin/myscript.sh . cat myscr
我正在编写一个脚本,该脚本将监视来自 nagios 的特定主机上的流量。我已经研究了一些已经制作的脚本并收集了几乎所有我需要做的信息但是我在识别流量所需的 OID 时遇到了问题。我想使用 IF-MIB
我正在寻找有关 SNMP IOD 返回值的文档。例如,MIB IBM-SYSTEM-HEALTH-MIB 1.3.6.1.4.1.2.6.159.1.1.30 ,它提供有关温度、电压和风扇状态的信息。
我正在寻找有关 SNMP IOD 返回值的文档。例如,MIB IBM-SYSTEM-HEALTH-MIB 1.3.6.1.4.1.2.6.159.1.1.30 ,它提供有关温度、电压和风扇状态的信息。
在 PL/pgSQL 中,我有一个可能包含也可能不包含 oid 的列。我需要检测它是否存在。 目前我是这样做的: select oidtext from t into x where name =
我已经编写了一个扩展 netsnmp 的自定义 SNMPV2C 代理(agentx 协议(protocol)),截至目前,我允许对 snmpd.conf 中的所有内容进行查看访问,如下所示 view
我正在使用以下 URL 尝试登录我的 Azure ad B2C 帐户: https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
这个问题已经有答案了: How to find counters of printers through SNMP (1 个回答) 已关闭 9 年前。 我目前正在开发一个应用程序,该应用程序涉及通过
我正在尝试让 mongodb 查询正常工作。集合的格式如下: { "_id": { "$oid": "54651022bffebc03098b4567" }, "browser": "ie",
您能描述一下包含 OID 的利弊吗? (通常是数据库行标识符)在 POJO 中在你的模型中代表一个实体? 事实上,我不是在谈论与 equals/hashcode 等相关的问题,我应该更好地描述我的问题
我有一个奇怪的案例,我不知道它是怎么发生的。 这是我的 table : id date amount 其中 id 不能为 NULL 并且会自动增加。 去年有人系统造成如下情况: OID
是否可以从我知道其 OID 的表中进行选择?有点像 select * from 123456::regclass 我知道我可以通过构造一个动态查询在一个函数中完成它,但我不能直接这样做似乎很奇怪——我
我对 PostgreSQL 的表 oid 有疑问。我创建一个表。 oid 为 24622 (-rw-------- 1 postgres postgres 8192 11 月 29 日 17:45 2
是否可以使用 oid 数据类型作为主键? CREATE TABLE "Test" ( id oid NOT NULL DEFAULT nextval('"Test_id_seq"'::regcla
我想检查 PostgreSQL 中 OID 对象的实际大小。在 PgAdmin 中我只能看到数字。如何显示实际尺寸? 最佳答案 尝试 select octet_length(lo_get(file))
正如在 issue#2217 中所写的那样,我想设计一个函数,它在第一个输出参数中返回一个 oid 列表。 我应该: 将 oid 列表作为指向指针的指针返回? int git_commit_tree_
我找到了一个很棒的 SSL 库,它很容易理解(对我来说),更重要的是,它很容易拆开,以便获得我想使用的加密原语。 但是有一件事我不明白: //HMAC with SHA-256 OID (1.2.84
我正在编写 Python 代码,其中用户以下列任何形式输入 SNMP OID: 1.3.6.1.2.1.90.1.2 internet.2.1.90.1.2 我希望我的代码将 internet 解析为
我是一名优秀的程序员,十分优秀!