Changing system user account homedirs on Mac OS X

While I've grown to like the features of both PostgreSQL and Mac OS X, administering them is a lot more arcane than MySQL and Linux.

Today I've been upgrading from PostgreSQL 8.2 to 8.3, which amongst other things meant changing the homedir for the postgresql account that I run the server under.

Under Linux, this is easy – open up /etc/passwd and change it. Under Mac OS X, for ‘hidden’ accounts (ie. anything not shown in the Accounts preferences pane) you need to use the Directory Services system:

$ sudo dscl .

You need the dot there at the end, BTW.

> cd /Users/postgres

(Or /Users/whatever_user_account_you're_interested_in)

/Users/postgres > read
AppleMetaNodeLocation: /Local/Default
GeneratedUID: 81A7F432-9135-4EA1-9097-993BC70AA7A5
NFSHomeDirectory: /opt/local/var/db/postgresql82
Password: *
PrimaryGroupID: 500
RealName:
 PostgreSQL-82\ Server
RecordName: postgres
RecordType: dsRecTypeStandard:Users
UniqueID: 500
UserShell: /bin/sh

This shows you all the account properties. You'll need to know the current value, because:

/Users/postgres > change . NFSHomeDirectory /opt/local/var/db/postgresql82 /opt/local/var/db/postgresql83

- you supply both the old and new values to the change command (nice oplocking scheme, I likey).