什么时候以及为什么有些人决定他们需要在他们的数据库中创建一个视图?为什么不运行一个普通的存储过程或选择?

我想给一个用户在数据库上的所有权限,而不使它成为管理员。 我想这样做的原因是,目前DEV和PROD是同一集群上的不同db,所以我不希望用户能够更改生产对象,但必须能够更改DEV上的对象。

我试着:

grant ALL on database MY_DB to group MY_GROUP;

但它似乎没有给予任何许可。

然后我试着:

grant all privileges on schema MY_SCHEMA to group MY_GROUP;

它似乎允许我创建对象,但不允许我在该模式上查询\删除属于其他用户的对象

我可以继续在MY_SCHEMA上给用户USAGE权限,但是它会抱怨没有对表的权限…

所以我想我的问题是:是否有任何简单的方法将所有权限赋予一个用户在数据库上?

我在PostgreSQL 8.1.23工作。

如何比较字符串,使比较只有在每个字符串的大小写相等时才为真。例如:

Select * from a_table where attribute = 'k'

...将返回一个属性为'K'的行。我不想要这种行为。

SQL中单引号和双引号的区别是什么?

对于我开发的一些应用程序(后来渐渐忘记了),我一直在编写纯SQL,主要用于MySQL。虽然我在python中使用过orm,比如SQLAlchemy,但我并没有坚持使用它们太久。通常是文档或复杂性(从我的角度来看)阻碍了我。

我是这样认为的:为了可移植性,使用ORM,如果只使用一种类型的数据库,则使用纯SQL。在开发需要数据库支持的应用程序时,我真的在寻找关于何时使用ORM或SQL的建议。

考虑到这一点,使用轻量级包装器来处理数据库不一致要比使用ORM好得多。

在阅读一些SQL调优相关文档时,我发现了这个:

选择计数(*):

计算行数。 通常不恰当地用于验证记录的存在。

SELECT COUNT(*)真的那么糟糕吗?

验证记录存在的正确方法是什么?

我有一个经常从Visual Studio数据库项目重新部署的开发数据库(通过TFS自动构建)。

有时当我运行我的构建时,我会得到这个错误:

ALTER DATABASE failed because a lock could not be placed on database 'MyDB'. Try again later.  
ALTER DATABASE statement failed.  
Cannot drop database "MyDB" because it is currently in use.  

我试了一下:

ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE

但我仍然无法删除数据库。(我猜大多数开发人员都有dbo访问权限。)

我可以手动运行SP_WHO并开始终止连接,但我需要在自动构建中自动执行此操作。(虽然这次我的连接是数据库中唯一一个我试图放弃的连接。)

是否有一个脚本可以删除我的数据库,而不管连接的是谁?

我正在寻找一个SQL脚本,可用于确定是否有任何数据(即行计数)在给定数据库的任何表。

这样做的目的是在存在任何行(在任何数据库中)的情况下重新具体化数据库。

这里所说的数据库是Microsoft SQL SERVER。

谁能建议一个示例脚本?