Questions tagged «debugging»

1
我如何找出*为什么*用户具有某些有效权限?
我知道我可以通过使用sys.fn_my_permissions以下命令查询有效权限: USE myDatabase; SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT') entity_name | subentity_name | permission_name ------------------------------------------------ dbo.myTable | | SELECT dbo.myTable | | UPDATE ... 这告诉我当前用户是否对myTabledatabase 具有SELECT,INSERT,UPDATE等权限myDatabase。 是否可以轻松找出用户为何具有这些权限?例如,我很想拥有一个fn_my_permissions_ex输出附加reason列的函数: USE myDatabase; SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT') entity_name | subentity_name | permission_name | reason ------------------------------------------------------------------------------------------------------------------------------------ dbo.myTable | | SELECT | granted to database role …


1
使用类型修饰符的数据类型的结果令人惊讶
在讨论此问题的递归CTE解决方案时: 获取每个ID的最后5个不同的值 @ypercube偶然发现了一个令人惊讶的异常,这使我们研究了类型修饰符的处理。我们发现了令人惊讶的行为。 1.类型转换在某些情况下保留类型修饰符 即使指示不要这样做。最基本的例子: SELECT 'vc8'::varchar(8)::varchar varchar至少我会期望(没有修饰符)。但是结果是varchar(8)(带有修饰符)。在下面的小提琴中有许多相关案例。 2.数组串联在某些情况下会丢失类型修饰符 不需要,因此在另一侧犯了错误: SELECT ARRAY['vc8']::varchar(8)[] , ARRAY['vc8']::varchar(8)[] || 'vc8'::varchar(8) 第一个表达式产生varchar(8)[]预期的效果。 但是第二个,在连接另一个之后,varchar(8)会减少到varchar[](无修饰符)。array_append()以下小提琴中的示例提供类似的行为。 在大多数情况下,所有这些都无关紧要。Postgres不会丢失数据,并且当分配给列时,无论如何该值都被强制为正确的类型。但是,在相反方向上的错误最终导致一个令人惊讶的异常: 3.递归CTE要求数据类型完全匹配 给出此简化表: CREATE TABLE a ( vc8 varchar(8) -- with modifier , vc varchar -- without ); INSERT INTO a VALUES ('a', 'a'), ('bb', 'bb'); 尽管此rCTE适用于该varchar列vc,但不适用于该varchar(8)列vc8: WITH RECURSIVE cte AS ( …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.