PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在
JAVA技术交流QQ群:170933152
1.出现这个错误
2、错误原因
在PostgreSQL数据库中,创建数据库表时,弹出上述错误提示框
3、解决办法
利用SQL语句创建表
create table t_student(
id int,
name varchar(12)
);
具体原因分析:
PostgreSQL 9.5以前的版本,pg_authid有个字段rolcatupdate,用来标记用户是否有更新catalog的权限。 如果rolcatupdate=false,即使是超级用户也不能更新catalog。
但是在9.5以后,这个字段被删掉了,如下commit:
http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=bb8582abf3c4db18b508627a52effd43672f9410
Remove rolcatupdateThis role attribute is an ancient PostgreSQL feature, but could only be
set by directly updating the system catalogs, and it doesn't have any
clearly defined use.Author: Adam Brightwell <adam.brightwell@crunchydatasolutions.com>
因此你在9.5的版本看不到pg_authid的字段rolcatupdate了。
然而EDB有个用来增量同步Oracle, PostgreSQL数据的工具xDB,这个工具需要用到这个权限,更新pg_class.relhastriggers字段来禁用触发器。
例子:
digoal=# create table tab(id int);
CREATE TABLE
digoal=# create or replace function tg() returns trigger as $$
digoal$# declare
digoal$# begin
digoal$# raise notice 'trigged';
digoal$# return null;
digoal$# end;
digoal$# $$ language plpgsql strict;
CREATE FUNCTION
digoal=# create trigger tg after insert on tab for each row execute procedure tg();
CREATE TRIGGER
digoal=# insert into tab values (1);
NOTICE: trigged
INSERT 0 1
更新pg_class.relhastriggers = false,就看不到这个触发器了。
digoal=# update pg_class set relhastriggers =false where relname='tab';
UPDATE 1
digoal=# insert into tab values (1);
INSERT 0 1
digoal=# insert into tab values (2);
INSERT 0 1
digoal=# insert into tab values (3);
INSERT 0 1
digoal=# \d+ tabTable "public.tab"Column | Type | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------id | integer | | plain | | digoal=# update pg_class set relhastriggers =true where relname='tab';
UPDATE 1
digoal=# \d+ tabTable "public.tab"Column | Type | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------id | integer | | plain | |
Triggers:tg AFTER INSERT ON tab FOR EACH ROW EXECUTE PROCEDURE tg()
使用这种语法也可禁用触发器
digoal=# alter table tab disable trigger tg;
ALTER TABLE
digoal=# \d+ tabTable "public.tab"Column | Type | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------id | integer | | plain | |
Disabled user triggers:tg AFTER INSERT ON tab FOR EACH ROW EXECUTE PROCEDURE tg()
这种方法禁用触发器实际上是改动pg_trigger.tgenabled
digoal=# \d pg_triggerTable "pg_catalog.pg_trigger"Column | Type | Modifiers
----------------+--------------+-----------tgrelid | oid | not nulltgname | name | not nulltgfoid | oid | not nulltgtype | smallint | not nulltgenabled | "char" | not nulltgisinternal | boolean | not nulltgconstrrelid | oid | not nulltgconstrindid | oid | not nulltgconstraint | oid | not nulltgdeferrable | boolean | not nulltginitdeferred | boolean | not nulltgnargs | smallint | not nulltgattr | int2vector | not nulltgargs | bytea | not nulltgqual | pg_node_tree |
Indexes:"pg_trigger_oid_index" UNIQUE, btree (oid)"pg_trigger_tgrelid_tgname_index" UNIQUE, btree (tgrelid, tgname)"pg_trigger_tgconstraint_index" btree (tgconstraint)digoal=# insert into tab values (2);
INSERT 0 1
digoal=# alter table tab enable trigger tg;
ALTER TABLE
digoal=# insert into tab values (2);
NOTICE: trigged
INSERT 0 1
赋予普通用户alter table enable|disable trigger的权限
digoal=# grant trigger on table tab to digoal;
GRANT
digoal=# \c digoal digoal
digoal=# alter table tab disable trigger tg;
ALTER TABLE
PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在相关推荐
- mysql工具navicat用户授权_Navicat使用教程:在Navicat Premium中管理MySQL用户 - 第4部分:权限管理器工具...
Navicat Premium 在线订购享专属优惠 立即购买>>> 第4部分:Privilege Manager(权限管理器)工具 在本系列教程中,我们一直在探索如何使用Navic ...
- mysql 查看用户权限_在Navicat Premium中管理MySQL用户 - 第4部分:权限管理器工具
更多资源请查看:[Navicat使用教程2019.1] | [Navicat Data Modeler使用教程] 第4部分:Privilege Manager(权限管理器)工具 在本系列教程中,我们一 ...
- mysql设置用户永不过期_在Navicat Premium中管理MySQL用户 - 第2部分:创建新用户
第2部分:创建新用户 在第1部分中,我们学习了如何使用Navicat Premium用户管理工具保护MySQL root帐户.本篇文章将讨论设置新用户的帐户详细信息,帐户限制和SSL设置. The G ...
- navicat新建mysql用户_Navicat使用教程:在Navicat Premium中管理MySQL用户 - 第2部分:创建新用户...
第2部分:创建新用户 在第1部分中,我们学习了如何使用Navicat Premium用户管理工具保护MySQL root帐户.本篇文章将讨论设置新用户的帐户详细信息,帐户限制和SSL设置. The G ...
- navicat创建mysql用户_在 Navicat Premium 中管理 MySQL 用户-第 2 部分:创建新用户
2018 年 6 月 5 日,由 Robert Gravelle 撰写 第 2 部分:创建新用户 第 2 部分:创建新用户第 1 部分中,我们学习了如何使用 Navicat Premium 用户管理工 ...
- postgresql学习笔记(三)连接管理
使用以下三个SQL语句来取消正在运行的查询并终止连接 (1)查出活动连接列表及其进程ID 1 select * from pg_stat_activity; (2)取消连接上的活动查询 1 selec ...
- PostgreSQL学习笔记(更新ing)+c# 使用ef连接数据库postgreSQL
目录 PostgreSQL学习笔记 一.PostgreSQL创建.删除数据库(表).架构 1.创建数据库 CREATE DATABASE 2.查看数据库 3.删除数据库 4.创建表 5.删除表 6.架 ...
- Windows进程与线程学习笔记(七)—— 时间片管理
Windows进程与线程学习笔记(七)-- 时间片管理 要点回顾 基本概念 CPU时间片 分析 KeUpdateRunTime 分析 KiDispatchInterrupt 备用线程 总结 要点回顾 ...
- JDBC学习笔记03【JDBC事务管理、数据库连接池、JDBCTemplate】
黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...
最新文章
- 如何将简单CMS后台管理系统示例转换为Java、Php等不同后台语言的版本
- 用Windows系统实现RAID功能
- Cookie简介及JSP处理Cookie的方法(转)
- 千家BBS系列-技术宝典(免费下载软件)
- php谈谈你对分布式的理解,简谈关于对分布式处理的理解
- 【数据结构与算法】之深入解析“24点游戏”的求解思路与算法示例
- RadioWar_RFID_LiveCD_Alpha330
- JavaScript RegExp(正则表达式) 对象
- zabbix-通过自动注册自动添加主机
- python学习笔记16--javascript总结
- 【全源码及文档】基于JAVA的干部档案管理系统
- 解决Windows10下java环境变量配置不生效的问题
- uni-app 超详细教程(二)(从菜鸟到大佬)
- 使用记账软件,记录每笔消费和收入操作简单
- RTL8367RB -CG
- win10无法装载iso文件_Windows 10更新后无法装载iso虚拟光盘
- 详解UniSwap、无聊猿、PlatoFarm空投的逻辑
- 如何将nc文件转化为txt格式
- 解密双十一、618电商大促数据大屏指标实现原理
- 将数字上调至8的倍数