数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

1
pgAdmin在任何远程操作上都非常慢
我从本地pgAdmin远程连接到我们的开发服务器运行此查询: select * from users order by random() limit 1; 它挂了17秒并显示 Total query runtime: 148 ms. 1 row retrieved. 它也挂在任何操作上:甚至右键单击表格。 之后,我通过RDP连接并在相同的pgAdmin版本中运行相同的查询,并立即使用显示结果query time: 32 ms。 然后我再次从本地pgAdmin运行查询: Total query runtime: 337 ms. 1 row retrieved. 我向服务器ping了130毫秒。连接速度应该足够,因为我可以在那里通过FTP上传文件。 使用本地psql运行相同的查询会在几秒钟内完成,并包括连接时间。 我的本地pgAdmin中带有本地数据库副本的相同查询也立即完成。 pgAdmin版本是1.20.0。还检查了最新的1.22-仍然相同。 我该怎么做才能加快pgAdmin? 请注意,psql可以正常工作,我在那里看不到相同的延迟。 pgAdmin日志进行17秒查询运行: 2016-02-06 16:18:03 INFO : queueing : select * from users …

1
在PowerShell中通过SQLCMD连接到LocalDB
我正在尝试使用SQLCMD实用程序通过PowerShell访问计算机上的“ localdb \ MSSQLLocalDB”服务器。我正在使用PowerShell v5,.NET v5.0,并且服务器名称是(localdb)\MSSQLLocalDB在Microsoft SQL Server Management Studio 2014中连接到服务器时的名称。 PS C:\> sqlcmd -S localdb\MSSQLLocalDB并PS C:\> sqlcmd -S .\localdb\MSSQLLocalDB导致此错误: Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序11:SQL Server网络接口:查找指定的[xFFFFFFFF]服务器/实例时出错。 我在Management Studio中查询了服务器名称,SELECT @@ServerName并-S在上述命令中使用了该名称,并得到了相同的错误。 PS C:\> sqlcmd -S localdb 给出此错误: Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序11:命名管道提供程序:无法打开与SQL Server的连接[53] 其他说明:我可以使用以下连接字符串连接到服务器并在C#控制台应用程序中使用名为testdb01的数据库进行工作System.Data.SqlClient: "Data Source=(localdb)\\mssqllocaldb;Initial Catalog=testdb01;Integrated Security=SSPI;"

2
SQL Server 2014 Express的不同安装程序之间的差异
我试图了解SQL Server 2014 Express的不同安装程序之间的差异。如果您能告诉我所有可能的信息或找到有关它们的文档,我们将不胜感激。 https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=42299 Express 32BIT WoW64\SQLEXPR32_x86_ENU.exe Express 32BIT\SQLEXPR_x86_ENU.exe Express 64BIT\SQLEXPR_x64_ENU.exe ExpressAdv 32BIT\SQLEXPRADV_x86_ENU.exe ExpressAdv 64BIT\SQLEXPRADV_x64_ENU.exe ExpressAndTools 32BIT\SQLEXPRWT_x86_ENU.exe ExpressAndTools 64BIT\SQLEXPRWT_x64_ENU.exe LocalDB 32BIT\SqlLocalDB.msi LocalDB 64BIT\SqlLocalDB.msi MgmtStudio 32BIT\SQLManagementStudio_x86_ENU.exe MgmtStudio 64BIT\SQLManagementStudio_x64_ENU.exe

2
高效合并(删除重复项)数组
我有两个表,left2和right2。两个表都将很大(1-10M行)。 CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER); ALTER TABLE left2 ADD PRIMARY KEY (id,t1); CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] ); ALTER TABLE right2 ADD PRIMARY KEY(t1,d); 我将执行这种类型的查询: SELECT l.d + r.d, UNIQ(SORT((array_agg_mult(r.arr))) FROM left2 l, right2 r WHERE l.t1 = r.t1 GROUP BY l.d …

2
psql:SELECT *…除了一列
我寻找一种简单的方法来选择除psql中的所有列以外的所有列。 随着psql我的意思是交互式命令行。 我对扩展*到带引号的列名列表的工具感到满意。然后,我可以删除专栏以手动删除。 我的问题只是关于psql的交互用法。这与那些对sql标准不满意的人以及想要执行“ select * -foo”之类的问题的问题不是重复的。
10 postgresql  psql 

3
添加子查询时,PostgreSQL查询非常慢
我对具有150万行的表进行了相对简单的查询: SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 输出: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …

1
时间戳字段的默认值无效(mysql 5.7)
编辑:从mysql 5.6更新现有数据库并执行时: UPDATE phppos_register_log SET shift_end = '2015-01-01 00:00:00' WHERE shift_end = '0000-00-00 00:00:00'; 这将产生: #1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'shift_end' at row 1 #1067 - Invalid default value for 'shift_start' 这在mysql <= 5.7中起作用。我找不到与此相关的任何文档...这是什么问题? CREATE TABLE `phppos_register_log` ( `register_log_id` int(10) NOT NULL AUTO_INCREMENT, `employee_id_open` int(10) NOT …
10 mysql  mysql-5.7 


1
为什么postgresql pg_dump将视图导出为表?
我正在使用PostgreSQL 9.3 pg_dump工具使用以下方法仅提取公共模式定义: pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql 但是当我检查schema.sql我们的一种观点时,它出现在CREATE TABLE声明中而不是CREATE VIEW声明中。 但是,如果我pg_dump使用以下特定视图: pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql 然后schema.sql包含实际的视图定义。 那么,为什么会这样呢?感谢大伙们!

1
PostgreSQL上的只读单表访问权限最少
以下是似乎可以用来创建新用户(登录)并为PostgreSQL上的一个指定表授予只读访问权限的命令列表。 假设这些命令是在具有足够特权的登录时执行的(即postgres默认安装中的登录)。 CREATE ROLE user_name NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity'; 现在,我想授予数据库select上的表的权限,因此就可以了(通过PgAdmin或类似方法将数据库选择为当前数据库):tab_abcdb_xyzdb_xyz grant select on tab_abc to user_name; 现在的问题是:这是足够的,或者应该有更多的赠款(数据库connect,usage也许)? 这些命令似乎对我有用,但是我的默认安装具有默认的安全设置。如果服务器管理员配置了更强的安全性,我还应该添加哪些其他赠款? 看来,我不需要批准connect,也没有usage-而授予是implicite select?总是这样吗?

1
如何使用索引加快Postgres中的排序
我正在使用postgres 9.4。 的messages具有以下模式:消息属于FEED_ID,并且具有posted_at,还消息可以具有(在答复的情况)的父消息。 Table "public.messages" Column | Type | Modifiers ------------------------------+-----------------------------+----------- message_id | character varying(255) | not null feed_id | integer | parent_id | character varying(255) | posted_at | timestamp without time zone | share_count | integer | Indexes: "messages_pkey" PRIMARY KEY, btree (message_id) "index_messages_on_feed_id_posted_at" btree (feed_id, posted_at DESC NULLS …

1
如何在Amazon RDS PostgreSQL中临时禁用外键?
我正在将现有测试环境迁移到Amazon RDS PostgreSQL。测试框架具有将某些表中的数据重新加载到较早状态的功能。为此,它将禁用外键,删除现有数据,加载保存状态并再次启用外键。 当前,测试框架通过禁用所有触发器来禁用外键(当然,这需要超级用户): alter table tablename disable trigger all; 在RDS上,此操作失败并显示: 错误:权限被拒绝:“ RI_ConstraintTrigger_a_20164”是系统触发器 如何在Amazon RDS PostgreSQL中临时禁用外键? 注意:已经问过类似的问题(RDS上的PostgreSQL:如何在FK约束下批量导入数据?),但这是专门针对脱机导入的,解决方案也针对脱机导入。

2
取消等待锁定的PostgreSQL ALTER TABLE查询是否安全?
我们在ALTER TABLE几个小时前开始查询,直到最近(通过pg_stat_activity)才意识到它正在等待锁。我们发现了另一个查询,该查询在我们要更改的表上拥有一个锁,并且不让它走。 我们的查询是一个“简单”查询(更改列数据类型),但是它在大型表上运行。 我们决定杀死而不是杀死保持锁定状态的进程,而不是杀死ALTER TABLE。 我们并没有包裹ALTER TABLE在一个事务中。 据我了解,我们的查询正在等待锁的事实意味着它一直在等待锁,并且从未更改过任何内容。 这是真的?我们完全取消ALTER TABLE查询是否安全?还是查询已经修改了某些内容并取消它会使我们的数据库处于某种中间状态? PS:计划使用取消它SELECT pg_cancel_backend(pid);。如果这是个坏主意,请告诉我。

3
您如何找到使用存储过程的位置(在其他存储过程中)
我在具有数千个SP的数据库中有一个要重构的存储过程。有没有一种快速的方法可以在其他SP中找到对该存储过程的引用,因此我可以确定重构时不会破坏任何其他代码。 在应用程序代码中,我可以很容易地找到对SP的调用,并且可以对定义SP的所有各种sql文件进行文本搜索,但是数据库中可能有一些SP可能会被这种方式错过。 编辑:我要查找的存储的过程是包的一部分。 编辑:我在Oracle 11g上运行

2
缓冲池外的SQL Server 2012内存消耗
我有一个SQL Server 2012 SP2 Enterprise Edition实例,比最大内存消耗约20GB的内存。内存限制。该实例限制为65GB,但以下查询显示的正在使用的物理内存为86GB SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB] FROM sys.dm_os_process_memory; GO 该服务器是物理服务器,具有2个NUMA节点。有没有一种方法可以找出正在消耗缓冲池之外的内存的原因(我假设这是正在发生的事情)? 这是DBCC MEMORYSTATUS的输出: 这是设置的内存限制: 提前致谢。 更新:-我已经运行了亚伦建议的查询 SELECT TOP (20) * FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC 这是输出:- pages_kb的总和约为60GB 更新2:-DBCC MEMORYSTATUS的完整输出在这里:-http: //pastebin.com/nGn6kXEc 更新3: - Shanky在这里的Excel文件的脚本输出: - http://jmp.sh/LKRlH4K 更新4:-输出的屏幕截图:- SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB] FROM sys.dm_os_process_memory; GO 因此,这似乎表明SQL Server使用的内存大于65GB。

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.