On Feb 3, 2021, at 09:04, Peter West wrote:
> MacOS Big Sur 11.2 MacBook Air M1
>
> I’m migrating to the M1 from an Intel MacBook Pro running Mojave.
>
> I installed postgresql13 and -server, and copied my defaultdb across from the
> Pro.
>
> I can’t vouch for the order of these things, because I wasn’t expecting to
> get into a quagmire.
>
> I tried to give the postgres user a password using passwd as root. That’s not
> enough. I have to use a command ’security’ with a reference to a Keychain to
> complete the process. In the wake of all this, I assume that the user
> postgres is created without a password, and that’s Ok with the default
> pg_hba.conf.
As far as I know, anytime MacPorts creates a macOS user account on behalf of a
portfile that requests it, it does so without a password, and this is not
thought to be a problem. The user accounts do not have a shell set so nobody
could log into them.
> Then I thought that maybe I should build up the databases by dumping
> databases from the Pro and restoring to the M1. So I uninstalled the
> postgresql ports and tried to delete /opt/local/var/db/postgresql13. The
> defaultdb disappeared but root was not allowed to remove a directory Library
> sitting beside the defaultdb. It had Preferences and Keychains subdirs, and
> they wouldn’t go.
I am not certain why. I do not have much experience with macOS 11 yet.
> I deleted the postgres user through the System Preferences, but that left the
> entry for _postgres in /etc/passwd.
The fact that the postgres user was visible in System Preferences indicates a
problem. macOS user accounts that MacPorts creates for you are not visible in
System Preferences.
You said you migrated from another Mac. In my experience, the migration
assistant will migrate any MacPorts-created user accounts improperly. After
migration, the accounts will appear in System Preferences, and their home
directories will have been moved into /Users, which may make the ports that use
those user accounts not work correctly. Cleaning up the user migration mess
that the migration assistant leaves behind is not easy. Whenever I migrate, I
choose not to migrate MacPorts-created user accounts and instead have MacPorts
recreate them properly.
I believe the entry for _postgres in /etc/passwd is fine and normal on any
macOS system. Apple puts it there, along with creating the _postgres macOS user
account. This is unrelated to the postgres macOS user account the MacPorts
postgresql-server ports create.
> Ok, install postgresql13 again. Installation proceeded, but this time did not
> create the postgres user visible through System Preferences, which I assume
> was created when I first installed.
You can check on the command line whether the postgres user created by MacPorts
exists:
id postgres
If that doesn't show "no such user", you're fine.
> When I try to access the macports wrapper (via su) to start the database, I
> get the complaint
> shell-init: error retrieving current directory: getcwd: cannot access parent
> directories: Permission denied
> could not identify current directory: Permission denied (3times)
> The program “postgres” is needed by pg_ctl but was not found in the same
> directory as pg_ctl
> (for obvious reasons, me)
> Check your installation.
> (you don’t say)
Not sure, but try cd'ing to a different directory before doing what you did.
Maybe you were in a directory that no longer existed. MacPorts has a similar
error message that can appear if you are in a port's directory when you run
`sudo port sync` because (if you sync with rsync) that deletes all port
directories and recreates them.