数据库管理员

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

4
SELECT INTO语句的进度
我们的ETL流具有长期运行的SELECT INTO语句,该语句正在动态创建一个表,并在其中填充了几亿条记录。 该语句看起来像 SELECT ... INTO DestTable FROM SrcTable 为了便于监视,我们希望大致了解该语句在执行过程中的进度(大约行数,写入的字节数或类似的值)。 我们尝试了以下方法,但无济于事: -- Is blocked by the SELECT INTO statement: select count(*) from DestTable with (nolock) -- Returns 0, 0: select rows, rowmodctr from sysindexes with (nolock) where id = object_id('DestTable') -- Returns 0: select rows from sys.partitions where object_id = …

4
向现有PK添加自动增量
我在另一个数据库中已经存在的数据库中创建了一个表。最初是用旧的DB数据填充的。该表的PK必须接收那些记录上已经存在的值,因此它不能是自动递增的。 现在,我需要新表将其PK作为自动增量。但是,在PK已经存在并且有数据之后,我该怎么办?



1
MySQL GRANT PROXY-是什么意思?
我跑: show grants for root@localhost; 我看到 GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION 从mysql文档: https://dev.mysql.com/doc/refman/5.5/zh-CN/proxy-users.html 这使外部用户可以成为第二个用户的代理。即具有第二个用户的特权。换句话说,外部用户是“代理用户”(可以模仿或成为另一个用户的用户),第二个用户是“代理用户”(其身份可以由代理用户使用的用户) 。 但是我不明白他们的意思。我是从另一个下班的工人那里得到的系统,他想确保一切都安全,甚至不知道是否需要这项补助。但是,如果它没有造成任何安全问题,我可以保留。 有人可以用更简单的方式解释吗? 更新: 如何以其他用户身份连接?我尝试使用用户名密码的各种组合,但无法使其连接。 例如,我使用root用户,但使用了另一个用户的密码,该密码不起作用。尝试了另一个用户和root密码,也无法正常工作。 更新: 还是这意味着root用户可以作为其他用户连接?至少例如,如何这样做?
14 mysql  proxy 

4
Ansible:如何通过重新配置服务器来更改MySQL服务器根密码
我已为服务器配置了Ansible剧本。我使用过root / bedrock-Ansible剧本。 任务之一是与mysql root用户密码一起设置mysql服务器。 现在,我急需更改此密码。我采取的步骤: 我更新了Ansible角色的变量 我执行了命令ansible-playbook -i hosts/staging server.yml以重新配置服务器 所有任务均按预期执行(无更改),但是脚本失败, [mariadb | Set root user password]并显示以下消息: msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials 我的猜测是,一旦设置了MySQL根密码,重新配置服务器就无法更改该密码。 是否可以通过用Ansible重新配置服务器来更改MySQL根密码?我有什么选择?
14 mysql 

1
最佳的mysqldump设置是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 经过一番搜索后,我得到了以下设置: mysqldump\ --host=localhost\ --port=3306\ --databases ****\ --user=****\ --password=****\ --default-character-set=utf8\ --add-drop-database\ --add-drop-table\ --add-locks\ --complete-insert\ --extended-insert\ --lock-all-tables\ --create-options\ --disable-keys\ --quick\ --order-by-primary\ --set-charset\ --tz-utc\ > dump/test.sql 到目前为止,还不错,但是我对参数以及执行有一些疑问。 关于我的第一个问题,我只想确保所有这些都是必需的,并且一起使用时不会引起任何冲突。最终,我想制作一个非常健壮和一致的转储文件,其中包含数百万条记录,用于创建表,数据库和插入数据。好处是,使数据库暂时不可用对我来说不是问题。我唯一的目标是制作一个健壮且一致的转储文件。 关于我的第二场音乐会,我想知道如何在命令出错时得到通知,如果出错,则抛出异常。 有任何想法吗? 编辑 这是我根据RolandoMySQLDBA的反馈更新的mysqldump命令。 mysqldump\ --host=localhost\ --port=3306\ --databases ****\ --user=****\ --password=****\ --default-character-set=utf8\ --opt\ --single-transaction\ --routines\ --triggers\ --events\ --add-drop-database\ --add-drop-table\ --complete-insert\ --delayed-insert\ --tz-utc\ …


2
Mongo DB副本设置为停留在RECOVERING状态
我们已经创建了一个副本集,现在的问题是副本集的2个成员[3个成员集]从48小时开始处于恢复模式。最初,恢复节点的大小在增加,现在甚至停止了。因此,在恢复节点时,它们会在90 GB数据和60+ GB本地数据后卡住。 如何摆脱这种模式?

2
PostgreSQL:模式差异/补丁工具
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 请考虑以下设置: 生产数据库 开发数据库,​​对其进行架构更改以启用新功能 新功能的开发完成后,我必须手动更新prod db模式,直到pg_dump --schema-only两个DB上的相同。此过程容易出错且乏味。 因此,我正在寻找一种可以实现以下目的的工具: 显示两个架构(例如diff)之间差异的摘要。请注意,我不是在寻找模式的文本差异,而是在寻找可以得出结论的更复杂的工具,例如“表X具有新列Y”。 自动生成将一种模式转换为另一种模式的SQL代码(如patch) 是否有一个架构差异 / 补丁工具可以帮助我将产品架构转换为更高级的开发架构?

1
优化大型数据库查询(25+百万行,使用max()和GROUP BY)
我使用的是Postgres 9.3.5,并且数据库中有一个大表,目前它有2500万行,而且它往往会迅速增大。我正在尝试通过一个简单的查询来选择特定的行(所有行都unit_id只有最新的行unit_timestamp),例如: SELECT unit_id, max(unit_timestamp) AS latest_timestamp FROM all_units GROUP BY unit_id; 没有任何索引,此查询大约需要35秒才能执行。使用定义的索引(CREATE INDEX partial_idx ON all_units (unit_id, unit_timestamp DESC);),查询时间缩短到(仅)19秒左右。 我想知道是否有可能在更短的时间内(例如几秒钟)执行我的查询,如果可以,我应该采取什么步骤来进一步优化它? 我的表结构转储如下所示: CREATE TABLE "all_units" ( "unit_id" int4 NOT NULL, "unit_timestamp" timestamp(6) NOT NULL, "lon" float4, "lat" float4, "speed" float4, "status" varchar(255) COLLATE "default" ) ALTER TABLE "all_units" ADD PRIMARY …

2
官方PostgreSQL大写约定[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 是否有关于DB,表和字段名中大写字母的正式PostreSQL约定? 将在官方网站上的例子表明一个小写字母和_单词的分离,我不知道这个策略是否正式。 CREATE TABLE films ( code char(5) CONSTRAINT firstkey PRIMARY KEY, title varchar(40) NOT NULL, did integer NOT NULL, date_prod date, kind varchar(10), len interval hour to minute );


2
数据库设计:规范“(多对多)对多”关系
精简版 我必须在现有的多对多连接中为每对添加固定数量的其他属性。跳到下图,就优点和缺点而言,选项1-4中的哪一种是通过扩展基本案例来实现此目的的最佳方法?或者,还有没有在这里我没有考虑过的更好的选择? 较长的版本 我目前有一个通过中间联接表以多对多关系的两个表。现在,我需要向属于这对现有对象的属性添加其他链接。尽管属性表中的一个条目可能适用于多个对(或者甚至可以成对使用多次),但每个对都有固定数量的这些属性。我正在尝试确定执行此操作的最佳方法,并且在梳理如何思考情况时遇到了麻烦。从语义上来说,我似乎可以很好地描述以下任何一种情况: 一对链接到一组固定数量的其他属性 一对链接到许多其他属性 许多(两个)对象链接到一组属性 许多对象链接到许多属性 例 我有两个对象类型,X和Y,每个都有唯一的ID,以及一个objx_objy带有列x_id和的链接表y_id,它们一起构成链接的主键。每个X可以与许多Y相关,反之亦然。这是我现有的多对多关系的设置。 基本情况 现在,我另外在另一个表中定义了一组属性,以及一组条件,在这些条件下,给定(X,Y)对应该具有属性P。条件的数量是固定的,所有对都相同。他们基本上说:“在情况C1中,对(X1,Y1)具有属性P1”,“在情况C2中,对(X1,Y1)对具有属性P2”,依此类推,对于联接中每对的三种情况/条件表。 选项1 在我目前的状况正好有三个这样的条件,我也没有理由认为增加,所以一种可能性是添加列c1_p_id,c2_p_id以及c3_p_id对featx_featy,指定用于给定x_id和y_id,其性能p_id在每个三种情况使用。 在我看来,这并不是一个好主意,因为它使SQL难以选择应用于某个功能的所有属性,并且无法轻松扩展到更多条件。但是,它确实对(X,Y)对执行一定数量的条件的要求。实际上,这是这样做的唯一选择。 选项2 创建一个条件表cond,并将条件ID添加到联接表的主键中。 不利的一面是,它没有为每对指定条件数量。另一个是当我只考虑初始关系时,例如 SELECT objx.*, objy.* FROM objx INNER JOIN objx_objy ON objx_objy.x_id = objx.id INNER JOIN objy ON objy.id = objx_objy.y_id 然后,我必须添加一个DISTINCT子句以避免重复的条目。这似乎已经失去了每个对应该只存在一次的事实。 选项3 在联接表中创建一个新的“对ID”,然后在第一个与属性和条件之间建立第二个链接表。 除了缺乏对每对执行固定数量的条件外,这似乎具有最少的缺点。创建一个除了现有ID之外没有其他标识的新ID是否有意义? 选项4(3b) 与选项3基本相同,但不创建其他ID字段。这是通过将两个原始ID都放入新的联接表中来完成的,因此它包含x_id和y_id字段,而不是xy_id。 这种形式的另一个优点是它不会更改现有表(尽管它们尚未投入生产)。但是,它基本上多次复制整个表(或者无论如何感觉都是这样),因此似乎也不理想。 摘要 我的感觉是,选项3和4足够相似,我可以选择其中一个。如果不要求对属性进行少量固定的链接,那么到现在我可能已经有了,这使得选项1看起来比其他情况更加合理。根据一些非常有限的测试,DISTINCT在这种情况下向我的查询添加一个子句似乎不会影响性能,但是我不确定选项2和其他情况是否都代表了这种情况,因为放置会引起内在的重复链接表的多行中的相同(X,Y)对。 这些选择是我最好的前进方式,还是我应该考虑另一种结构?

3
更新json数据类型中的json元素
我不知道如何更新PostgreSQL 9.3数据类型中的元素。 我的例子: CREATE TABLE "user" ( id uuid NOT NULL, password character varying(255), profiles json, gender integer NOT NULL DEFAULT 0, created timestamp with time zone, connected timestamp with time zone, modified timestamp with time zone, active integer NOT NULL DEFAULT 1, settings json, seo character varying(255) NOT NULL, …

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.