Firstly, the su problem was because I was still in my home directory. When I 
sudo su - Postgres (note the minus) all is OK.

In my travels I discovered dscl, which I had managed not to encounter over many 
long year. How very handy it is. I deleted the postgres user with ddcl, and 
then re-installed postgresql13 and server.

One thing that causes confusion is that the _postgres user in /etc/passwd has a 
different UID and GID from the dscl user and group. It’s the same on Mojave. I 
have no idea what these /etc/passwd entries are about, given the underlying 
differences.

Peter

—
Peter West
peter.b.w...@ehealth.id.au
“A prophet is not without honor, except in his hometown and among his relatives 
and in his own household.”


> On 4 Feb 2021, at 11:45 am, Ryan Schmidt <ryandes...@macports.org> wrote:
> 
> 
> 
> 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.
> 






Reply via email to