有没有办法导出 PostgreSQL 数据库,然后用另一个名称导入它?
我在 Rails 中使用 PostgreSQL,我经常从生产中导出数据,其中数据库名为 blah_production,并在开发或暂存时将其导入,名称为 blah_development 和 blah_staging。在 MySQL 上,这是微不足道的,因为导出在任何地方都没有数据库(可能除了注释),但在 PostgreSQL 上这似乎是不可能的。不可能吗?
我目前正在以这种方式转储数据库:
pg_dump blah > blah.dump
Run Code Online (Sandbox Code Playgroud)
我没有使用 -c 或 -C 选项。该转储包含以下语句:
COMMENT ON DATABASE blah IS 'blah';
ALTER TABLE public.checks OWNER TO blah;
ALTER TABLE public.users OWNER TO blah;
Run Code Online (Sandbox Code Playgroud)
当我尝试导入时
psql blah_devel < blah.dump
Run Code Online (Sandbox Code Playgroud)
我得到
WARNING: database "blah" does not exist
ERROR: role "blah" does not exist
Run Code Online (Sandbox Code Playgroud)
也许问题真的不是数据库而是角色?
如果我以这种方式倾倒它:
pg_dump --format=c blah > blah.dump
Run Code Online (Sandbox Code Playgroud)
并尝试以这种方式导入它:
pg_restore -d blah_devel < tmp/blah.psql
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
pg_restore: WARNING: database "blah" does …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种对 Linux 上正在运行的进程进行非侵入式核心转储的方法。
我熟悉 gdb 的gcore,但它只能在gdb附加到进程时运行并且它停止调试。对于一个大的核心转储,这可能意味着多秒甚至几分钟的中断执行。
有没有非阻塞的替代方案?
Linux 支持写时复制内存,它依赖于在fork()没有exec(). 所以我在考虑一些内核级别的事情,其中内核获取正在转储的进程的进程页表的写时复制快照,然后在原始进程继续运行的同时写出核心。
我很确定我可以使用gdb强制fork()然后转储孩子,而父母愉快地继续,然后wait()在父母终止后收割孩子。但是,它很混乱,并且仍然需要两次中断父进程,尽管很短。
以前肯定有人需要这个吗?
假设一个(非常)大的进程正在崩溃和转储核心,我们从其他信息(可能是断言消息,也可能是其他信息)中知道原因。
有没有办法阻止核心转储完全生成,因为在这种情况下它是一种浪费?
例如,核心转储过程的 kill -9 会中断核心文件的生成吗?
显然,如果我们提前知道我们不想要核心转储,我们可以适当地设置 ulimit 或使用操作系统的各种核心文件控制实用程序。
但这个问题是关于“核心转储已经在进行中”的阶段......
(例如,假设我是/sf/ask/1285776971/ 中的请求者 并且不想浪费 5 -6 TB 的磁盘空间 :) )
我已经按照网上很多地方的说明,在 apache 产生段错误时如何从 apache 获取核心转储,但它仍然拒绝生成转储。
我有:
CoreDumpDirectory指令添加到httpd.conf文件中并将其设置为/tmpulimit -c unlimitedecho '/tmp/core-%e.%p' > /proc/sys/kernel/core_patternecho 0 > /proc/sys/kernel/core_uses_pidHttpd 已重新启动,但仍未创建转储。
我正在运行 CentOS 5.8 x64httpd-2.2.3-65.el5.centos.3和php-5.3.20-13.el5.art
任何帮助将非常感激!
我正在浏览网络以寻找解决方案,但我没有运气。:(
如何在不安装 Oracle 服务器的情况下将Oracle 的imp/exp二进制文件安装到我的 CentOS 机器上?我正在访问另一台机器上现有的 Oracle 数据库,所以我只需要一个客户端。我已经安装了sqlplus它的依赖项(oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm, 和oracle-instantclient11.2-odbc-11.2.0.3.0-1.x86_64.rpm),但是没有提供这些工具。
我真的需要完全安装 Oracle 吗?
我的目标是将数据库转储从 Oracle 吸到我的 CentOS 机器上。如果有另一种不使用的方法可以做到这一点,exp我不会因为不使用它而感到难过,但在我看来,别无选择。
有没有办法获得核心转储或能够调试已被 oom-killer 杀死的进程?
或者甚至设置 oom-killer 来尝试使用 ABRT 来终止进程?
我的团队在尝试进行由 OutOfMemoryErrors 触发的良好堆转储时遇到了困难。出于特定原因,我们目前正在使用从 bash 脚本调用的 jmap 进行转储,而不是使用 HeapDumpOnOutOfMemoryError 标志。我们使用的是 64 位 1.6 JVM,堆大小约为 3 GB。我们的堆转储失败 90% 的时间(猜测)。
有什么我们可以做的事情来提高我们获得干净的堆转储的几率,我们可以用它来解决内存问题吗?我已经读到 jmap 在 Java 1.4 中存在重大问题,但现在应该主要解决这些问题。
如何让 init.d 在启动时启动守护进程到 Ubuntu 上的 coredump?这是我到目前为止所做的......
echo "ulimit -c unlimited" >> /etc/profile
mkdir /corefiles/
chmod 777 /corefiles/
echo "kernel.core_pattern=/corefiles/core.%e.%u.%t" >> /etc/sysctl.conf
echo "fs.suid_dumpable=1" >> /etc/sysctl.conf
echo "kernel.core_uses_pid = 1" >> /etc/sysctl.conf
sysctl -p
Run Code Online (Sandbox Code Playgroud)
这对除了由 init.d 在引导时启动的守护进程之外的所有内容都非常有用。我正在运行 Ubuntu 10.04。我正在寻找一种不涉及编辑每个守护进程 init.d 文件的解决方案。
编辑:另外,以 sudo 启动的守护进程不进行核心转储。
我们在windows下有一个postgres-databse,就是9.1版本。我们想转储数据并在运行 Postgres 8.4 的 Linux 服务器下导入。数据包括带有 Postgis 的空间数据。
问题是,转储不会导入,因为它使用诸如“CREATE EXTENSION ..”之类的命令,这些命令在较旧的 Postgres 上无法理解。有没有办法在这些数据库之间传输数据?
我正在尝试调试一些在现场使用的戴尔平板电脑间歇性崩溃的偶发问题。查看事件查看器日志,似乎 Windows 会在崩溃后自动创建内存转储文件。但 Windows 还会在创建后的 15 秒内自动删除该内存转储文件,因为平板电脑硬盘上的可用空间不足 25 GB。(我想可能有 23 GB 的可用空间,或者类似的东西。)
那显然仍然有足够的空间,所以我希望门槛不要设得那么高。我怎样才能改变它?或者更确切地说,我如何完全禁用该清理步骤?我真的需要处理这些内存转储之一,以便我可以更好地分析真正的问题是什么。