我有一系列存储过程从数据库中选择数据.我有一个角色(cctc_reader),它具有在程序上授予的执行权限.其中一个过程调用另一个存储过程,该过程recControl_system_option
依次进行查询Information_schema.columns
.
问题是在这个proc中查询
select column_name from information_schema.columns where table_name = 'recControl_manager'
不会返回任何记录.cctc_reader具有以下授权权限:
recControl_system_option
所以在理论上这应该有效.在dbo下运行时我没有问题.
如果我将db_datareader授予cctc_reader,那么查询就可以了,但我不想将读者权限授予所有表(因此我使用了存储过程).我已经尝试在一些文章中建议的主数据库中的Information_schema上授予选择权限,但仍然无法使其工作.
有什么建议?
我目前正在为MySQL中的所有数据库使用InnoDB,但是我注意到我的information_schema数据库使用MyISAM来处理非MEMORY的表.
我正在调查InnoDB/MyISAM问题.虽然我不认为这是它的原因,但我担心这种混合.该数据库最初是使用MyISAM设置的.之后更新了my.cnf文件,将引擎重置为InnoDB.我正在使用MySQL 5.5.10.
将information_schema数据库设置为MyISAM可能会出现哪些问题,但是所有其他数据库都设置为MySQL?
对于那些寻求帮助的人: 如果您在寻找答案时遇到此问题或想要了解更多信息,请查看您的默认数据库引擎:
show variables;
Run Code Online (Sandbox Code Playgroud)
要查看分配给数据库中表的引擎:
show table status;
Run Code Online (Sandbox Code Playgroud)
我的my.cnf设置:
[client]
default-character-set=utf8
[mysqld]
log=/usr/local/var/mysql/mysqld.log
character-set-server = utf8
collation-server = utf8_general_ci
lower_case_table_names=2
default_storage_engine=InnoDB
# Performance hacks:
innodb_flush_method=nosync
innodb_flush_log_at_trx_commit=0
Run Code Online (Sandbox Code Playgroud) 在PostgreSQL中,表结构的列数据存储在pg_attribute中,pg_class中有几个字段,pg_attrdef中有几个字段.
但我没有看到任何地方存储的NUMERIC字段类型的精度或比例.
它可以在INFORMATION_SCHEMA表中找到,但我试图避免它们,因为它们不使用oid来轻松连接到pg_catalog表.
所以问题是:列精度和比例存储在postgreSQL系统表中的哪个位置?
我需要知道PostgreSQL中的列类型(即varchar(20)
).我知道我可能会\d
在psql中使用某些内容找到它,但我需要使用select查询来完成它.
这在PostgreSQL中是否可行?
如何使用主键打印出列的"主键"?
如果表具有主键,而不是带有主键的一列和其他列在keyType中为空,则为所有列获取"主键".
SELECT c.TABLE_NAME,
c.COLUMN_NAME,
c.DATA_TYPE,
c.Column_default,
c.character_maximum_length,
c.numeric_precision,
c.is_nullable,
CASE
WHEN u.CONSTRAINT_TYPE = 'PRIMARY KEY' THEN 'primary key'
ELSE ''
END AS KeyType
FROM INFORMATION_SCHEMA.COLUMNS as c
LEFT JOIN information_schema.table_constraints as u ON c.table_name = u.table_name
ORDER BY table_name
Run Code Online (Sandbox Code Playgroud) sql-server sql-server-2005 constraints information-schema primary-key
SQL Server文档在这里说,该table_schema
领域information_schema.tables
是"不可靠",并且得到一个对象的架构的正确方法是查询sys.objects
.
任何人都可以详细说明报告的架构如何以及何时information_schema.tables
可能不正确?
我正在运行MySQL的5.5.11版本,查询INFORMATION_SCHEMA.key_column_usage表时的性能非常糟糕.
我有一个简单的选择请求:
SELECT REFERENCED_TABLE_NAME
, TABLE_NAME AS TableName
, COLUMN_NAME AS ColumnName
, CONSTRAINT_SCHEMA AS Db
FROM INFORMATION_SCHEMA.key_column_usage
Run Code Online (Sandbox Code Playgroud)
平均需要8秒才能返回400行.这是一个知道问题吗?如果是这样,有没有办法提高性能(补丁可能?).
我有这个查询,查找与我的某个数据库的列名匹配的所有表和视图.我正在使用SQL SERVER 2008
SELECT table_name FROM information_schema.columns
WHERE column_name = 'product_name'
Run Code Online (Sandbox Code Playgroud)
我想扩展我的查询功能,以搜索所有数据库,甚至查找具有我搜索列名称的存储过程.
我有一个小问题.我正在与一些未经过编程/数据库设计的手动测试人员合作.我们当前的流程意味着这些手动测试人员需要在特定时间将数据插入我们的数据库,同时我们构建GUI以便将来实现此目的.
在此期间,我想创建一个简单的网站.我想对网站做的只是简单地连接到我们的数据库,允许手动测试人员输入一些关键字,并返回表格中与所提供的关键字相近/相关的任何列.这将为我们的测试人员在我们(相当大的)数据库中搜索colums节省大量时间.
我怎么能创建这样的网站?我认为它可能对很多人有用,所以我决定在这里发布问题以收集StackOverflow的想法.
目前,我正在考虑一个带有文本框的简单PHP页面,它允许用户输入一些以逗号分隔的数据.基于逗号分解数据,将其保存在数组中.连接到我的数据库,然后使用信息架构视图来检索列信息. 我的主要问题是 - 使用信息架构视图检索与用户输入的关键字相关的列的最有效方法是什么?如何确保返回的列最合适?
这里的任何输入将不胜感激.非常感谢.
Tl; dr是粗体部分,适合忙碌的人:)
是否有任何标准或至少非常常见的文件格式来序列化数据库的模式?似乎每个数据库模式工具都带有自己的文件格式,用于列出表、列、索引等。
这个问题早在 2009 年就被问过,但没有令人满意的答案:Standard Database Neutral XSD toDescribe a Relational Database Schema
xml postgresql entity-relationship information-schema database-schema
sql-server ×4
postgresql ×3
mysql ×2
sql ×2
constraints ×1
database ×1
dynamic-sql ×1
innodb ×1
myisam ×1
performance ×1
permissions ×1
php ×1
primary-key ×1
types ×1
xml ×1