小编Nec*_*ann的帖子

禁用/启用触发所有的 Postgresql 权限

迁移时我需要禁用表的触发器和约束/外键关系。我正在使用 Flyway 进行迁移。

因此,我想创建一个除超级用户之外的不同用户,并让新用户能够禁用/启用给定模式的所有触发器/约束。

所以我尝试了这个:

CREATE USER "MY_USER" WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE postgres to "MY_USER";

create schema "MY_SCHEMA";

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA "MY_SCHEMA" TO "MY_USER";
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA "MY_SCHEMA" TO "MY_USER";
GRANT ALL PRIVILEGES ON SCHEMA "MY_SCHEMA" TO "MY_USER";
Run Code Online (Sandbox Code Playgroud)

但是当我使用 MY_USER 并尝试运行此脚本时:

ALTER TABLE "MY_SCHEMA".TBLTABLE
     DISABLE TRIGGER ALL;
Run Code Online (Sandbox Code Playgroud)

我收到错误:权限被拒绝:“RI_ConstraintTrigger_c_16434”是系统触发器。

当我使用超级用户尝试此脚本时,我可以运行它,但无法使用我创建的用户运行它。有什么建议么?

sql postgresql flyway

4
推荐指数
1
解决办法
9209
查看次数

为什么不能用Java实现泛型数组?

Java使用类型擦除

我的理解new ArrayList<String>()是将其转换为原始类型,并且使用大量的语法糖来假装Object的这个ArrayList就像String的ArrayList.Java将此称为类型擦除.

例如

这是我用Java写的:

public static void main(String[] args) {
    ArrayList<String> stringList = new ArrayList<>();
    stringList.add("foo");
    String s = stringList.get(0);
}
Run Code Online (Sandbox Code Playgroud)

当我反编译字节码时,我得到了这个:

public static void main(String[] args) {
    ArrayList<String> stringList = new ArrayList();
    stringList.add("foo");
    String s = (String)stringList.get(0);
} 
Run Code Online (Sandbox Code Playgroud)

因此

为什么无法使用编译器为类型擦除提取的"shtick" 自动new T[]转换为(T[]) new Object[] 自动转换?

请不要将我引用到这个问题:我无法在Java中创建通用数组类型的原因是什么?特别是这个评论:

问题比答案更深刻,因此需要进一步调查.如你所说的类型信息被删除,在编译代码中我们没有两个泛型类型之间的区别 - 我们只有基类型 - 所以为什么T[]- 编译到Object[].在这种情况下,一切都会很好 - 数组将记住它是使用对象类型创建的,并将保存所有类型.然而,对我来说,真正的问题是数组是协变的意味着Animal[]可以分配给Object[].另一方面,泛型不是ArrayList<Animal> 不能分配的ArrayList<Object>

因为这个逻辑是有缺陷的!

这里有两个进程.

  1. 编译器强制执行"人为" …

java arrays generics

3
推荐指数
1
解决办法
189
查看次数

C#9 中 &amp;&amp; 和 和 有什么区别?

既然andC# 9 中存在关键字,我and应该什么时候使用,&&什么时候应该使用?

c# c#-9.0

-4
推荐指数
1
解决办法
167
查看次数

标签 统计

arrays ×1

c# ×1

c#-9.0 ×1

flyway ×1

generics ×1

java ×1

postgresql ×1

sql ×1