数据库管理员

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

1
向大表添加串行列的最有效方法
将BIGSERIAL列添加到巨大的表(〜3个Bil。行,〜174Gb)中,最快的方法是什么? 编辑: 我希望该列为现有行(NOT NULL)的增量值。 我没有设置填充因子(回想起来,这似乎是一个错误的决定)。 我的磁盘空间没有问题,只是希望它尽可能快。

4
如何将表数据的子集从生产数据库导出到本地测试数据库中?
我们有一个相对较大的基于postgres的数据库:〜20GB。PostgreSQL数据库托管在heroku上。 我想将表数据的一小部分复制到我的本地数据库中,这样我就可以对它们进行一些测试,而不必进行生产工作。 我不想自己生成样本数据,而是使用生产环境中已经存在的数据。 数据库中每个表的约100行就足够了。有没有简单的方法可以做到这一点?


6
将参数传递给psql
我在Postgres 8.3中运行一个plpgsql脚本-我想通过psql将参数传递给该脚本。我目前正在执行以下脚本: psql -d database -u user -f update_file.sql 我碰到了该链接,该链接解释了PGOPTIONS环境变量,但不适用于“自定义”参数。即我收到一个错误,因为该设置未在postgres.conf文件中列出。 -bash-3.2$ export PGOPTIONS='--pretend=true' -bash-3.2$ psql -d my_db -f update_database.sql psql: FATAL: unrecognized configuration parameter "pretend" 还有其他想法吗?理想情况下,我想避免环境变量...
10 postgresql  psql 

2
此“映射”表是否需要单独的Id列?
我有Producers和的表Products,两者的形式均为: Id -int,主键 Name -nvarchar 一个生产者可以携带多个产品,所以我要创建一个表ProducerDetails,该表将具有: ProducerId -int,外键 Producers.Id ProductId -int,外键 Products.Id 然后我开始质疑自己,所以我想问专家。Id在ProducerDetails表中增加一个附加列(int,主键)会更好吗?还是那是不必要的? 如果这有任何区别,我正在使用SQL-Server 2008 R2。 编辑 -我相信这些表之间的关系将是多对多的,抱歉,我没有说清楚。一个生产者可以携带多种类型的产品,并且同一产品可以由多个不同的生产者生产。 如果这个问题过于简单,我很抱歉,参照完整性/数据库设计不是我的强项(尽管我正在努力改善这一点)。

6
具有层次结构的表:创建约束以防止通过外键实现圆度
假设我们有一个对其自身具有外键约束的表,如下所示: CREATE TABLE Foo (FooId BIGINT PRIMARY KEY, ParentFooId BIGINT, FOREIGN KEY([ParentFooId]) REFERENCES Foo ([FooId]) ) INSERT INTO Foo (FooId, ParentFooId) VALUES (1, NULL), (2, 1), (3, 2) UPDATE Foo SET ParentFooId = 3 WHERE FooId = 1 该表将具有以下记录: FooId ParentFooId ----- ----------- 1 3 2 1 3 2 在某些情况下,这种设计可能是有道理的(例如,典型的“雇员与老板-雇员”关系),无论如何:在我的方案中有这种情况。 …


6
无法使用Workbench通过SSH连接到MySQL数据库
我正在尝试使用MySQL Workbench从我们的一台Web应用程序服务器通过SSH隧道连接到我的数据库。这是基本配置;请注意,出于安全原因,我更改了屏幕快照中的一些值。 问题是每次我尝试从我们的一台应用程序服务器通过SSH隧道连接时,都会出现以下错误: 无法使用用户social_shop_prod通过computer.amazonaws.com上的SSH隧道连接到us-east-1.amazonaws.com。无法连接到127.0.0.1上的MySQL服务器。 但是,如果我通过以下命令行通过SSH使用相同的凭据: mysql -u social_shop_prod -h us-east-1.amazonaws.com -p 我可以成功连接并获得MySQL交互式命令提示符。 在这里与我的开发团队的其他成员交谈时,我们谁也无法弄清楚为什么我无法使用Workbench从我们的应用程序服务器通过SSH进行隧道传输;但是当我SSH到我们的一台应用程序服务器并通过命令行连接到MySQL时;我可以成功连接。 为什么要尝试连接127.0.0.1以上?我没有在配置中指定;我的主机文件也没有将下面显示的域重定向到该IP。 非常感谢任何建设性的投入。


3
如何检索外键约束数据
我正在寻找一个查询,该查询允许检索整个架构的外键信息(每行:引用表和字段,引用表和字段)。 我已经找到了,但是没有提供我需要的所有信息:https : //stackoverflow.com/questions/4389228/sql-for-oracle-to-check-if-a-constraint-exists 我目前正在研究它,可能在接下来的几分钟/几小时内得到解决方案。但是,如果有人已经有了完整的工作解决方案,我将很高兴知道:)

1
如何在Windows上使用DB2 9.7向本地db2admin授予所有特权?
作为开发人员,我有一台装有Windows XP Professional Edition Service Pack 3的笔记本电脑。 我已经下载并安装了Express-C版的IBM DB2 UDB 9.7修订包4。 我有一个名为db2admin的本地Windows帐户,我将用作本地数据库管理员来进行DB2的本地安装(仅供开发人员使用)。 运行命令窗口时,我可以运行以下命令而不会出现问题: db2 attach to db2 user db2admin using xxxxxxxxxx 这使我可以附加到名为DB2的实例。 我可以运行我的创建数据库命令。 然后,我尝试连接到数据库以授予DB2中我的db2admin帐户的所有特权。 db2 CONNECT TO MYDB; SET SCHEMA DB2ADMIN; db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN; CONNECT RESET; 但是,当我运行该命令时,DB2告诉我我的实际Windows用户帐户(synprgcma)没有权限向用户db2admin授予权限。 因此,如果我将第二个脚本更改为以下内容: db2 CONNECT TO MYDB USER db2admin USING …


1
MySQL Dump Restore-如何保留注释
因此,我将复杂的MySQL转储作为备份。不幸的是,该备份非常复杂,我们使用了邪恶的触发器。 我们的某些恶意触发器的注释行以#字符开头。 当我备份数据库时,结果转储保存#行。问题是当我执行还原时。以#开头的行被空行替换。 因此,我正在寻找一种以英镑开头的行恢复转储的方法。


2
关于“交易ID环绕”
现在,我阅读了有关“ Transaction ID Wraparound”的文档,但是我确实不了解某些内容,该文档为以下网址 http://www.postgresql.org/docs/9.0/static/routine-vacuuming .html#VACUUM-FOR-WRAPAROUND 23.1.4。防止事务ID绕回失败 PostgreSQL的MVCC事务语义取决于能否比较事务ID(XID)编号:插入XID大于当前事务XID的行版本是“将来的”,并且对当前事务不可见。但是,由于事务ID的大小有限(32位),因此运行时间较长(超过40亿个事务)的群集将遭受事务ID环绕:XID计数器环绕为零,并且所有突然出现的交易过去似乎是未来-这意味着它们的输出将变得不可见。简而言之,灾难性的数据丢失。(实际上,数据仍然存在,但是如果您不能获得它,那真是令人感到安慰。)为避免这种情况,有必要对每个数据库中的每个表进行至少20亿次事务清理。 我不理解以下语句:“将使事务ID发生折回:XID计数器回绕为零,过去突然出现的所有事务似乎都将在将来发生-这意味着它们的输出变得不可见” 有人可以解释吗?为什么在数据库遭受事务ID折回后,过去的事务似乎会在将来出现?简而言之,我想知道PostgreSQL在自动清除事务ID后是否会处于“数据丢失”的情况。 就我个人而言,我们可以使用txid_current()函数获取当前事务ID,该函数的输出是64位并且不会被循环。所以我认为知道xmin的元组的插入事务ID会比获得通过txid_current()函数。除了在关闭PostgreSQL Server之后将使用pg_resetxlog reset reset transaction ID之外。我对吗 ?谢谢
10 postgresql 

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.