I am trying to run the Phoenix demo application per the official guide from an Administrator PowerShell session where I am the admin on my machine. I have installed every dependency but when I try to run mix phx.server, it tells me that it couldn't remove a file because (it's) not the owner. It seems odd that the using mix phx.new hello wouldn't have full control over this file that it just created. See the following output from my PowerShell session:
PS C:\users\Isaiah Nelson\Lab> cd hello
PS C:\users\Isaiah Nelson\Lab\hello> mix ecto.create
Compiling 13 files (.ex)
Generated hello app
The database for Hello.Repo has been created
PS C:\users\Isaiah Nelson\Lab\hello> mix phx.server
** (File.Error) could not remove file "c:/users/Isaiah Nelson/Lab/hello/_build/dev/lib/hello/priv": not owner
(elixir) lib/file.ex:1128: File.rm!/1
(mix) lib/mix/utils.ex:452: Mix.Utils.symlink_or_copy/2
(mix) lib/mix/project.ex:644: Mix.Project.build_structure/2
(mix) lib/mix/tasks/compile.all.ex:21: Mix.Tasks.Compile.All.run/1
(mix) lib/mix/task.ex:331: Mix.Task.run_task/3
(mix) lib/mix/tasks/compile.ex:96: Mix.Tasks.Compile.run/1
(mix) lib/mix/task.ex:331: Mix.Task.run_task/3
(mix) lib/mix/tasks/app.start.ex:58: Mix.Tasks.App.Start.run/1
I have since tried scouring the documentation on the Mix Task for phx.server but found no clues why this has happening. I have also even tried to set the 'hello' directory owner to Administrators, my user (Isaiah Nelson) and 'Everyone' with full control and inherited permissions but still I cannot run the demo app without getting this error. Is this a issue with Mix creating files in Windows via Powershell or is this some other Windows file permission issue? Either way, how I might fix it so I can run the demo?
If there is no reason to run phx app as administrator, you could "take" ownership recursively of the folder where project is located. Right click on folder then Properties > Securty > Advanced (button) then in new window Observe Owner at the top, click on "Change" link and find&pick your username. Click ok to close search dialog, then select "Replace all child object permission entries with inheritable permission entries from this object". Finally click Ok (or Apply) and try to run app without elevated rights.
EDIT
I found that in some cases editing code from WSL and later without WSL can mix access rights on file system leading to this or similar behavior, e.g. can't move folder to different location. If this is your case, then I suggest you to decide where your dev environment is, in WSL or in Win.
We have a read-only Postgresql database that should run in Openshift cluster.
We are using RHEL as the undrlying operating system.
Our Dockerfile will install postgres software, create the database instance, loads the data to it than shuts the database down and save the image.
We are using only bash and sql scripts and deploy the database using flyway.
When starting the container the entrypoint script will simply startup the database instance using "pg_ctl" command then perform an endless loop to keep the container running.
The Dockerfile has as the last command USER 26, where 26 is the id of the postgres user. The entrypoint script can be started as the postgres user or by a sudo user.
Everything is working well in Docker.
In Openshift the container is started by a different user belonging to the root group, but not the root user nor the user 26. Actually Openshift ignores the USER 26 clause in the Dockerfile.
The user starting the container (we'll call it containeruser) has anyhow no rights to start the postgres instance , so when running the entrypoint it will get permission denied on the postgresql data folder.
I have tried different options, adding the containeruser user to the wheel group and modify the sudoers file to allow it using sudo and start the entrypoint as postgres user but with no success.
So I have my database image ready but can not start it in Openshift.
On the openshift configuration side we are not allowed to make changes like allowing sudo usage, or starting the container as root or postgres user.
Any idea or help to this problem?
I am not an Openshift expert.
Thank you!
Best regards,
rimetnac
You have two choices.
The preferred choice is to fix your image so that it can run as any user. For this, do not use the existing postgres user. Create a new user, where that user has group root. Then ensure that all directories/files that PostgreSQL needs to write to are owned by that user, but also have group root and writable by group. When the container is then started up, it will run as an assigned user ID, not in /etc/passwd, and so will fallback to using group root still. Because the directories/file are writable to group root, everything will still work. For more information see:
https://docs.openshift.org/latest/creating_images/guidelines.html
Specifically, section 'Support Arbitrary User IDs'.
The second option if you have admin control of the cluster, and your security team do not object that you are overriding the default security model, is to allow your image to be run as user ID it wants to.
First create a new service account:
oc create serviceaccount runasnonroot
Next grant that service account the ability to run as non root user ID of its choosing.
oc adm policy add-scc-to-user nonroot -z runasnonroot --as system:admin
Then patch the deployment config to use that service account.
oc patch dc/mydatabase --patch '{"spec":{"template":{"spec":{"serviceAccountName": "runasnonroot"}}}}'
Note that this still requires you use USER in the image with an integer user ID and not postgres. Otherwise it can't verify it will run as non root user. That is because if you use a user name instead of user ID, you could be maliciously mapping that to root.
I spent days figuring this out and found one good solution.
OpenShift Origin runs an image as a user created by it, as explained in this OpenShift blog post. This prevents programs from being able to access needed files and directories. To successfully run a program on OpenShift Origin, the blog post provides two solutions, however, the first will not work for PostgreSQL and the second has two disadvantages (explained in the notes):
Grant group write access to the directories used by the main program.
This will not solve the problem because, although the PostgreSQL files will be accessible by any program, they must be owned by the owner of the PostgreSQL process.
Ensure that when operating system libraries are used to look up a system user, one is returned for the ID of the user OpenShift Origin runs the image as. The following are two methods for doing this:
Use a package called nss_wrapper, "which intercepts any calls which look up details of a user and returns a valid entry."
Make the UNIX password database file (/etc/passwd) have global write permissions in the image build so that the OpenShift user can be added to it in the S2I run script.
Each option has a disadvantage: 1. install an extra package and 2. make user accounts insecure.
The best solution is to build the docker image to run as the user OpenShift Origin will run the image as. I built this instructional image with it.
One additional problem to note is that, as the owner of the PostgreSQL process must be the owner of the files and directories accessed by PostgreSQL, PostgreSQL must be set up (i.e. initdb, roles, databases, etc.) during the image build. This is because file ownership can only be changed during the image build and the ownership of the files must be changed after PostgreSQL has been set up for the reason explained in #2 below.
Here are the complete steps with notes for setting up PostgreSQL in the image build:
Manually create the PostgreSQL data directory and change its ownership to a non-root user that will be used to initialze PostgreSQL and set up the components (e.g. roles and databases) required to run the server on OpenShift Origin.
This is required because the "initdb" executable must be executed by a user other than root and will need access to the data directory. Additionally, this user cannot be the user OpenShift Origin will run the image as because it is not in the system.
Switch to the non-root user.
This is required because the initdb executable must be executed "as the user that will own the server process, because the server needs to have access to the files and directories that initdb creates" (PostgreSQL documentation) and because the PostgreSQL server will be started to set up components (e.g. roles and databases) required to run the server on OpenShift Origin.
Run the "initdb" executable.
Start the PostgreSQL server, set up the required components (roles, databases, etc.) and stop the PostgreSQL server.
Switch back to the root user.
Change the ownership of the PostgreSQL files and directories to the user OpenShift Origin will run the image as.
Edit (06/20/18): I have found that there is a solution to set up PostgreSQL after the image is built. The user OpenShift Origin will run the image as can be added to the system at the start of the build. This will allow PostgreSQL to be set up and the ownership of its files and directories to be changed after the image build.
After gathering the comments from all contributors I can asnwer my question as follows:
Option 1
When you create the postgres database during image build, you must configure openshift policies to allow starting your container as the user that created the database during image build. Use this option when the database must be filled with data and this operation takes much time making it inappropriate for a container start. the entrypoint will only start the already prepared database.
Option 2
Create your database when starting the container using the entrypoint script. Use this option when the database creation is fast enough to be done at container start.
Option 3
See the last comment from Adrian which seems to answer all the problems anyhow I didn't got the time to test it.
Thank you all for your contributions.
I know there has been a dozen times a similar question, but I could not find an answer that worked for me.
I have a Debian 9 machine, fresh from install on which I have installed a Postgresql 9.6 server.
I am trying to create a new tablespace but it fails. The command :
CREATE TABLESPACE newTableSPace LOCATION '/DATA/PostgreSQL/';
Returns the following error :
ERROR: could not set permissions on directory "/DATA/PostgreSQL": Permission denied
SQL state: 42501
So, after a few basis searches, I have already checked the following points :
The directory /DATA/PostgreSQL exists
Its owner/group is postgres:postgres
The rights on the directory are 770
SELinux is apparently not installed (in Synaptic, libselinux1 is installed, but all selinux commands that I have tried returned me "command not found". Examples : selinuxenabled, setenforce 0).
I am running out of ideas.
Anybody has a suggestion ?
And I just found the solution !
The problem was the permissions of the user postgres not on directory /DATA/PostgreSQL/ but on the directory /DATA, on which it had no permission at all (it belonged to the current user with rights 770).
I have changed the permissions on this folder to 775. I guess another way would be to make the user postgres belong to the group that owns the DATA folder.
Hey I just found a possible solution, the thing is that you´ll have to give everyone access to the directory you to write in.
Right click in the directory ".../targetDirectory".
Properties> Security> In Group /usernames click on "edit"
Add another group or username, type "Everyone" and click "OK"
If you need to add more permisson to this group you check the permissions and press Ok.
You could see it in this video: https://www.youtube.com/watch?v=FQzBgEFkdes
This worked for me creating tablespaces and copy files from one directory to another one.
Hope this helps.
I tried to install postgresql 8.4 in my windows 7 (64 bit). But it fails with following messages in log
Initialising the database cluster (this may take a few minutes)...
Executing cscript //NoLogo "C:\PostgreSQL\8.4/installer/server/initcluster.vbs" "postgres" "postgres" "****" "C:\PostgreSQL\8.4" "C:\PostgreSQL\data" 5432 "DEFAULT"
Script exit code: 1
Script output:
CScript Error: Can't find script engine "VBScript" for script "C:\PostgreSQL\8.4\installer\server\initcluster.vbs".
Script stderr:
Program ended with an error exit code
Error running cscript //NoLogo "C:\PostgreSQL\8.4/installer/server/initcluster.vbs" "postgres" "postgres" "****" "C:\PostgreSQL\8.4" "C:\PostgreSQL\data" 5432 "DEFAULT" : Program ended with an error exit code
Problem running post-install step. Installation may not complete correctly
The database cluster initialisation failed.
Creating Uninstaller
Creating uninstaller 25%
Creating uninstaller 50%
Creating uninstaller 75%
I have googled about this and run the command 'regsvr32 vbscript.dll' and it shows the message 'DllRegisterServer in vbscript.dll is succeeded', but it haven't solved my issue.
Also I set the default value for {B54F3741-5B07-11cf-A4B0-00AA004A55E8} in registry to the file path of vbscript.dll, but it also haven't solved my issue.
How to fix this issue?
Following link solve my issue
http://www.geekscribes.net/blog/2009/04/22/postgresql-database-cluster-initialisation-failed-solution/
The article text:
I’ll keep this one short and sweet. For those of you that have tried
to install PostgreSQL (mine was 8.3.7-1) on Windows Vista and got the
error Database Cluster Initialisation Failed error at the end of the
install, read this.
The problem is that Vista has some safety features associated with
setting permissions on the Program Files folder. Basically, even if
you are an admin, you can’t change permissions on some folders like
Program Files and Windows folder itself. This causes initdb to be
unable to create some folders and the database cluster. What this
means for you is that you need to install PostgreSQL in another folder
that is not inside Program Files.
By the way, if you have forgotten your Postgres account password while
installing the first time, just open a Command Prompt in Vista (If you
don’t know how, Google for it). Then type the command “net user”. You
will see a list of users on your computer. Find Postgre’s account.
It’s usually “postgres“. Then you need to change its password by
typing “net user postgres new_password” where new_password is… well, a
new password for the account. You will be needing that postgres
account during install. You will need admin privileges to do this
change however.
Firstly, uninstall any failed installations. Use the Control Panel or
the PostgreSQL installer in the install folder.
During the install, you will be prompted to choose where you want to
install the program. Just select a location in another place. Like
“C:\PostgreSQL” or something similar. It may even be on your desktop.
But not inside Program Files. Not inside Windows folder. However, it’s
not as easy. Bear with me.
After the install, you will still see that darned error message (or
something like non-fatal error occured). Do not despair! (For Windows
Power Users, we are just assigning Full Control permission to Postgres
account on the new PostgreSQL install folder). For other users, read
on if you don’t know how to do it.
Go to where you just installed PostgreSQL. In this case, the C:
drive. There, right-click on the folder (usually called PostgreSQL),
and go to Properties – Security tab. Click on the Edit button. You
will now see some usernames and other stuff. Click on the Add button.
In the “Enter the object names to select” box, enter “postgres” and
press Check. Postgres’ user account should appear there. Click on Ok.
Now from the “Group or Usernames” box, select the Postgres account. In
the window below, with lots of checkboxes, assign permission “Full
Control” in the Allow Column to it. Note, if you don’t want to allow
full control, just give it read/write. But I just went ahead and gave
it Full Control. (I was tired and annoyed. The “World’s most advanced
open source database” had failed to install!). Click on Ok and wait a
bit for permissions to be applied.
Then, just do a re-install. Do not uninstall anything. Just run the
setup again. It’ll say that a PostgreSQL install folder already exists
and other stuff. Just click on Next until the install finishes. If you
see “file cannot be copied” errors, click on the “ignore” button when
needed.
That’s it. PostgreSQL should be up and running on Vista now. Hope it
works for you too as it did for me, and that my guide is helpful to
anybody. If it works, or if you have other solutions, let us know.
Thanks for reading! :)
I got the same result installing "postgresql-9.2.3-1-windows-x64.exe" on Windows 7 Enterprise
and the problem get solved when I change the installation path.
Try to install into "c:\postgresql" instead of "c:\program files\Postgresql"
Good luck
For me the problem was that PATH variable did not have C:\Windows\system32 and so it did not find ICACLS command to change folder permissions. So the solution is to add C:\Windows\system32 to system PATH variable (if it does not contain it already):
Control Panel -> System -> Advanced System Settings -> Advanced -> Environment Variables
Under "System variable" find and select "Path"
Click "Edit..."
Now if value does not contain path to system32 append string ;C:\Windows\system32 (or wherever your windows path is)
I've pulled shin's link from the google cache:
Original link:
http://www.geekscribes.net/blog/2009/04/22/postgresql-database-cluster-initialisation-failed-solution/
Cached link:
http://webcache.googleusercontent.com/search?q=cache:RXu-5-ZzfcgJ:www.geekscribes.net/blog/2009/04/22/postgresql-database-cluster-initialisation-failed-solution/+&cd=3&hl=ro&ct=clnk
PostgreSQL Database Cluster Initialisation Failed Solution
I’ll keep this one short and sweet. For those of you that have tried to install PostgreSQL (mine was 8.3.7-1) on Windows Vista and got the error Database Cluster Initialisation Failed error at the end of the install, read this.
The problem is that Vista has some safety features associated with setting permissions on the Program Files folder. Basically, even if you are an admin, you can’t change permissions on some folders like Program Files and Windows folder itself. This causes initdb to be unable to create some folders and the database cluster. What this means for you is that you need to install PostgreSQL in another folder that is not inside Program Files.
By the way, if you have forgotten your Postgres account password while installing the first time, just open a Command Prompt in Vista (If you don’t know how, Google for it). Then type the command “net user”. You will see a list of users on your computer. Find Postgre’s account. It’s usually “postgres“. Then you need to change its password by typing “net user postgres new_password” where new_password is… well, a new password for the account. You will be needing that postgres account during install. You will need admin privileges to do this change however.
Firstly, uninstall any failed installations. Use the Control Panel or the PostgreSQL installer in the install folder.
During the install, you will be prompted to choose where you want to install the program. Just select a location in another place. Like “C:\PostgreSQL” or something similar. It may even be on your desktop. But not inside Program Files. Not inside Windows folder. However, it’s not as easy. Bear with me.
After the install, you will still see that darned error message (or something like non-fatal error occured). Do not despair! (For Windows Power Users, we are just assigning Full Control permission to Postgres account on the new PostgreSQL install folder). For other users, read on if you don’t know how to do it.
Go to where you just installed PostgreSQL. In this case, the C: drive. There, right-click on the folder (usually called PostgreSQL), and go to Properties – Security tab. Click on the Edit button. You will now see some usernames and other stuff. Click on the Add button. In the “Enter the object names to select” box, enter “postgres” and press Check. Postgres’ user account should appear there. Click on Ok.
Now from the “Group or Usernames” box, select the Postgres account. In the window below, with lots of checkboxes, assign permission “Full Control” in the Allow Column to it. Note, if you don’t want to allow full control, just give it read/write. But I just went ahead and gave it Full Control. (I was tired and annoyed. The “World’s most advanced open source database” had failed to install!). Click on Ok and wait a bit for permissions to be applied.
Then, just do a re-install. Do not uninstall anything. Just run the setup again. It’ll say that a PostgreSQL install folder already exists and other stuff. Just click on Next until the install finishes. If you see “file cannot be copied” errors, click on the “ignore” button when needed.
That’s it. PostgreSQL should be up and running on Vista now. Hope it works for you too as it did for me, and that my guide is helpful to anybody. If it works, or if you have other solutions, let us know. Thanks for reading!
Solution:
• Uninstall PostgreSQL
• Run command: net user postgres /delete
• Click: Control Panel -> User Accounts -> Configure advanced user profile properties -> delete all “Unknown User” instances that seem to be left from PostgreSQL installation.
• Run: compmgmt.msc -> Click Local Users and Groups -> Users -> New User… -> User name: postgres, Password: postgrespass -> Create
• Run: compmgmt.msc -> Click Local Users and Groups -> Users -> postgres ->Member of -> Add… -> Administrators -> OK
• copy the PostgreSQL installer postgresql-8.4.9-1-windows.exe to C:\
• Run: runas /user:postgres cmd.exe -> cd \ -> postgresql-8.4.9-1-windows.exe -> installed successfully without errors. Checked data folder and confirmed files created successfully.
• Run: compmgmt.msc -> Local Users and Groups -> Users -> postgres -> Member of -> Administrators -> Remove
• Run: compmgmt.msc -> Local Users and Groups -> Users -> postgres -> Member of -> Add… -> Power Users -> OK
Your Windows install is a little borked, and you will need to re-register the VBScript engine to get the installer to run.
Edit: I'm blind, the post author had already tried this.
See:
http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#The_installer_exits_with_a_runtime_installation_error.3F
I had the same problem when trying to install PostgreSQL 9.3.5-3 on a Windows 7 x64 machine (not joined to a domain) in a folder, created on the root, with full access to everybody. The problem was solved by not using ä in my password, so avoid using non-English characters in your password.
This message still occurs in Postgres v9.3.1.1.
For me, the problem was running the installer under the "Administrator" account. This doesn't work. Run it under an administrator account, avoiding the built-in "Administrator" account.
I don't really know what it's usually called, but it's the one that already exists on a fresh install; the one that cannot be changed to a Standard User; the one whose profile is stored in C:\Users\Administrator. Turns out it was a bad idea using this account; learned it the hard way.
(Windows Server 2008 R2 64-bit)
Hey guys the answer is very simple just install postgresql on another folder outside program files. it prompts a non fatal error and proceeds to with the installation...
I have solved the same problem on Windows Server 2003 and postgres 9.2.9-3 by creating directory for installation beforehand, and giving full access on it to group "Users".
The answer is very simple, move the downloaded .exe file to some other folder . for ex: c:\postgres and try to install it.
your issue is due to some admin privilege issues
There seem to be many reasons cause the installation fail.
In my case, I'm using Windows 10 home edition, which has no advance user group control,
so a lot of solutions above doesn't work for me. And I guess this is why the installation fails.
What I do is just using BigSQL's installer instead of EnterpriceDB's installer,
Choose the second installer in posgresql download center
Or visit BigSQL directly.
After some struggle I came across this post. I struggled some more time and I think I finally figured it out with the help of all the invaluable input from my predecessors in this post.
My case
It's November 2018.
PostgreSQL 11.1 Winodws-x64 from EnterpriseDB as suggested by postgresql.org
Tried to install on Windows 10 (both Home and Professional)
I tried several constellations and boiled down the process to this:
Pre-installation
Uninstall any failed installations.
Add a local user "postgres" (lowercase worked for me) to your computer, assign a SIMPLE password and administrative rights. Do avoid special characters at all expenses, stick with english letters (upper and lowercase) and numbers only.
Add a folder on your computer OUTSIDE the "C:\Program Files" or Windows folder. I chose C:\PostgreSQL
Assign full control over the above folder to the postgres account.
Installation
Run the installer (postgresql-11.1-1-windows-x64.exe in my case)
use the above password and folder when prompted (not the default folder)
Post-installation
For security reasons you should now assign a proper password to the windows-user "postgres" and remove administrative rights from the account.
Test your installation by running pgAdmin and connecting to your server. However, the password for the postgres user you need to connect to the server will still be the simple one you used earlier. You may change it within pgAdmin by selecting the postgres database left, choose Tools -> Query Tool and type ALTER USER postgres WITH PASSWORD '4wligzo748o$%&'; or whatever. Execute with the flash symbol or F5.
But maybe this is wrong altogether and you should rather run a linux vm with postgreSQL server.
Struggling with this problem for days. Finally got help from the EDB team
My problem got solved by doing the following steps :
1) Open the command prompt and go to the following directory:
cd "C:\Program Files\PostgreSQL\10\bin"
2) Once you are inside this "C:\Program Files\PostgreSQL\10\bin" directory execute the following command:
.\initdb.exe -D "C:\Program Files\PostgreSQL\10\data"
3) At the end of this command you will be promoted to execute a pg_ctl command to start the Postgres cluster. Please execute the command and once you get a message as the server started you are all set to use the Postgres database.
Note: Instead of 10 user whatever version you have installed. If the pg_ctl command in the third step gives an error after running it in \bin directory, then try running it in \data directory. After the above process re-run the installer.
I know it is not the the solution but installing 32 bit of Postgres, worked for me
I had the same problem when trying to install PostgreSQL 9.6.2 on a Windows 7 32 bit machine,but i got solution,first just uninstall the installed postgres,then delete the postgres folder from 'c' drive,delete the entry from temp file which resides in "C:\Users\AppData\Local\Temp".Then again installed postgres 9.6.2 that installed successfully.
Had this same problem trying to install on my company computer (PC running Windows 7). If you are not admin on your computer, you need to install it within your personal "User" folder (not in the "Program Files" folder(s) at the root).
If you still can't access Postgres:
Once you'd installed it under your "User" folder, use the 'Run' program and type in "services.msc" and hit enter. In the window that pops up, go down to your postgres installation, right-click and go to "properties". In the "Log On" tab, select "Local System account" then go back to the "General" tab and click "Start". It should boot after that.
After this, I was able to run "pgAdmin" and access the database (after entering the password I used during installation).
I had the same problem today when installing postgres 9.6.19 on windows 10.
Solution: Neither the installation path nor the windows path variable may contain a blank! Near to the end of the installer log file (found in wondows %temp% dir with a name like bitrock_installer_16156.log) i found:
Script stderr: "\UnxUtils\usr\local\wbin\";"C:\Program" kann
syntaktisch an dieser Stelle nicht verarbeitet werden.
where the installation directory i set as well as my windows %PATH% variable contained
C:\Program Files\
Workaround:
open a command prompt as administrator and type:
set path=C:\WINDOWS\system32
PostgreSQL-9.6.10-1-win64-bigsql.exe
And then of course choose a path not containing a blank.
That did it for me.
I encountered an issue where a username with a space in it on windows fails the postgres installation.
To test:
Reinstalled windows 10 home (restored)
Made a user account without the space
Postgres installed successfully
Very frustrating...
check the services: if any folder there postgres related stop it, and change to disable mode.
check regedit: HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER -> software -> remove postgres folder if exists.
In system environment variable: TEMP path location, remove the TEMP folder for both user and system. and Rename the TEMP to TEMP1 or something..
In system environment variable: remove path for postgres if it exists.
Now change the location of postgres.exe file to another drive.
Restart the system
Then Run postgres.exe
create a new installation directory for postgres and put /data outside.
the easiest way i solve this was:
1.- uninstall if you have already installed
2.- delete all files with failed instalations
3.- start windows in secure mode
4.- run installer in secure mode (it pops a warning but ignore) and restart
and that's it when restarted the service was running ok and everything works fine