首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql关于外部HD

Postgresql关于外部HD
EN

Database Administration用户
提问于 2021-01-23 18:17:12
回答 2查看 1.2K关注 0票数 1
  • 我有一组比硬盘大很多倍的.csv文件,我想使用postgresql将其加载到数据库表中。(由于数据使用协议的限制,我必须将其保存在外部硬盘上。)
  • 由于大小限制,我想告诉Postgresql将加载到外部驱动器上的表存储起来。
  • 我想我可以用initdb -D '/Volumes/My Book/2020/'实现这一点,其中/Volumes/My Book/2020/是指向外部驱动器上文件夹的路径。
  • 我得到了错误:FATAL: data directory "/Volumes/My Book/2020" has invalid permissions 2021-01-23 11:21:58.864 EST [4390] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
  • 但是ls -l "/Volumes/My Book/"返回(以及其他行) drwxrwxrwx@ 1 my_username staff 1048576 Jan 19 13:29 2020,在我看来,这是一组正确的权限。
  • 我尝试了sudo chown my_username "/Volumes/My Book/2020/",但是我得到了与以前相同的错误。
  • 我尝试了sudo chmod a+rwx "/Volumes/My Book/2020/",但仍然得到了相同的错误。

有人能告诉我如何正确设置权限吗?(或者失败了:也许我对这个问题采取了错误的方法?)

谢谢!

EN

回答 2

Database Administration用户

发布于 2021-02-01 21:03:20

我是行动组。感谢以上人员的帮助。以下是我最后为解决这个问题所做的工作。我认为这是所有的步骤,但可能遗漏了一些东西。(这是通过Catalina上的Mac进行的。)如果我忘了一步,我很乐意接受任何纠正。

  • 通过磁盘实用程序格式化外部驱动器AFPS或GUID (使用“查看所有”命令)。(这将删除驱动器上的所有内容,因此需要备份。)
  • 格式化后,命令行中的sudo chmod -R 0750 "/Volumes/your_external_hd_name/将设置正确的权限。
  • initdb -D '/Volumes/your_external_hd_name/database/' #创建了一个“数据库集群”
  • pg_ctl -D /Volumes/your_external_hd_name/database/ start #似乎运行了集群
  • 注意:在上面的步骤中,如果您收到包含“是另一个已在端口5432上运行的邮局管理员”行的错误,则在命令行上运行ps -ef | grep postmaster | awk '{print $2}',然后对出现的任何PID运行kill <pid1> ... <pidN>
  • psql postgres
  • CREATE DATABASE <database_name>;
  • \l #列表数据库
  • \c <your_database> #连接到数据库
  • \dt #列表表
  • CREATE DATABASE <name>; #在集群中创建w
  • CREATE TABLE <table>; #包括一些列
  • 若要检查是否已创建\dt #,应显示
  • 如果您需要撤消/更正:DROP TABLE <name>;
  • \copy <table_name> FROM 'path/to/file';
  • \q #出口
  • pg_ctl stop -D /Volumes/your_external_hd_name/ #对于防止数据库损坏似乎很重要,但是我从来没有断开过w/out连接,所以我不能100%确定。
票数 1
EN

Database Administration用户

发布于 2021-01-24 04:36:16

如果要在外部磁盘上创建数据库,则应使用尚未存在的数据目录运行initdb。然后PostgreSQL qill用正确的权限创建它。数据目录应该属于postgres用户。PostgreSQL抱怨的是,它不能将对现有数据目录的权限降为它认为安全的设置。

如果要在外部磁盘上运行数据库群集,请确保在删除磁盘之前数据库已安全关闭。

您应该考虑的另一种方法是使用file_fdw定义外部表。然后,您可以直接从数据库中访问这些文件,而无需导入它们。当然,也有一些限制:不能在这些外部表上建立索引(因此只能进行顺序扫描),而且不可能对数据进行修改。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/283845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档