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/",但仍然得到了相同的错误。有人能告诉我如何正确设置权限吗?(或者失败了:也许我对这个问题采取了错误的方法?)
谢谢!
发布于 2021-02-01 21:03:20
我是行动组。感谢以上人员的帮助。以下是我最后为解决这个问题所做的工作。我认为这是所有的步骤,但可能遗漏了一些东西。(这是通过Catalina上的Mac进行的。)如果我忘了一步,我很乐意接受任何纠正。
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 #似乎运行了集群ps -ef | grep postmaster | awk '{print $2}',然后对出现的任何PID运行kill <pid1> ... <pidN>。psql postgresCREATE DATABASE <database_name>;\l #列表数据库\c <your_database> #连接到数据库\dt #列表表CREATE DATABASE <name>; #在集群中创建wCREATE 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%确定。发布于 2021-01-24 04:36:16
如果要在外部磁盘上创建数据库,则应使用尚未存在的数据目录运行initdb。然后PostgreSQL qill用正确的权限创建它。数据目录应该属于postgres用户。PostgreSQL抱怨的是,它不能将对现有数据目录的权限降为它认为安全的设置。
如果要在外部磁盘上运行数据库群集,请确保在删除磁盘之前数据库已安全关闭。
您应该考虑的另一种方法是使用file_fdw定义外部表。然后,您可以直接从数据库中访问这些文件,而无需导入它们。当然,也有一些限制:不能在这些外部表上建立索引(因此只能进行顺序扫描),而且不可能对数据进行修改。
https://dba.stackexchange.com/questions/283845
复制相似问题