diff --git a/openbis/source/sql/generic/117/schema-117.sql b/openbis/source/sql/generic/117/schema-117.sql
index 9a0433cb5987096d553d61b18412426086c7f2ad..8255a7a00f8b5d66fe09e26588f9b6d3bd54c87c 100644
--- a/openbis/source/sql/generic/117/schema-117.sql
+++ b/openbis/source/sql/generic/117/schema-117.sql
@@ -366,6 +366,7 @@ ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD CONSTRAINT MTPT_BK_UK UNIQUE(MATY_I
 ALTER TABLE DATA_SET_TYPES ADD CONSTRAINT DSTY_BK_UK UNIQUE(CODE,DBIN_ID);
 ALTER TABLE PERSONS ADD CONSTRAINT PERS_BK_UK UNIQUE(DBIN_ID,USER_ID);
 ALTER TABLE PROJECTS ADD CONSTRAINT PROJ_BK_UK UNIQUE(CODE,SPACE_ID);
+ALTER TABLE PROJECTS ADD CONSTRAINT PROJ_PI_UK UNIQUE(PERM_ID);
 ALTER TABLE PROPERTY_TYPES ADD CONSTRAINT PRTY_BK_UK UNIQUE(CODE,IS_INTERNAL_NAMESPACE,DBIN_ID);
 ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_PE_SPACE_BK_UK UNIQUE(PERS_ID_GRANTEE,ROLE_CODE,SPACE_ID);
 ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_PE_INSTANCE_BK_UK UNIQUE(PERS_ID_GRANTEE,ROLE_CODE,DBIN_ID);
diff --git a/openbis/source/sql/postgresql/migration/migration-116-117.sql b/openbis/source/sql/postgresql/migration/migration-116-117.sql
index 956aaa296b38215b400f2de9ec2f7a7209d6a754..fba263e510d54d8fccdf11065a241d9203e62662 100644
--- a/openbis/source/sql/postgresql/migration/migration-116-117.sql
+++ b/openbis/source/sql/postgresql/migration/migration-116-117.sql
@@ -22,3 +22,4 @@ DROP function GENERATE_PROJECT_PERM_IDS();
 
 -- change perm id column to not null
 ALTER TABLE projects ALTER COLUMN perm_id SET NOT NULL;
+ALTER TABLE PROJECTS ADD CONSTRAINT PROJ_PI_UK UNIQUE(PERM_ID);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ProjectDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ProjectDAOTest.java
index 834ffce8231138cba17929bda68c5a278c9fda85..0469e9e2cd0107e7c992bce259714d6c4e3e1661 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ProjectDAOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ProjectDAOTest.java
@@ -111,6 +111,7 @@ public class ProjectDAOTest extends AbstractDAOTest
         final List<ProjectPE> allProjects = daoFactory.getProjectDAO().listProjects();
         Collections.sort(allProjects);
         final ProjectPE templateProject = allProjects.get(4);
+
         assertEquals(templateProject.getCode(), TESTPROJ);
 
         ProjectPE found =
@@ -143,6 +144,20 @@ public class ProjectDAOTest extends AbstractDAOTest
                 templateProject.getSpace().getCode(), templateProject.getCode()));
     }
 
+    @Test
+    public void testTryGetByPermID() throws Exception
+    {
+        ProjectPE found = daoFactory.getProjectDAO().tryGetByPermID("20120814110011738-105");
+        assertEquals(TEST_PROJECT, found.getCode());
+    }
+
+    @Test
+    public void testTryGetByPermIDNonexistent() throws Exception
+    {
+        ProjectPE found = daoFactory.getProjectDAO().tryGetByPermID("UNKNOWN-PERM-ID");
+        assertNull(found);
+    }
+
     @Test
     public void testCreateProject() throws Exception
     {
diff --git a/openbis/sourceTest/sql/postgresql/117/finish-117.sql b/openbis/sourceTest/sql/postgresql/117/finish-117.sql
index b2c13baf4d404cd727b90761672d024924929671..e553c4ff4e686e0fa38115bf78ae6b8267452703 100644
--- a/openbis/sourceTest/sql/postgresql/117/finish-117.sql
+++ b/openbis/sourceTest/sql/postgresql/117/finish-117.sql
@@ -148,6 +148,8 @@ ALTER TABLE ONLY post_registration_dataset_queue
     ADD CONSTRAINT prdq_pk PRIMARY KEY (id);
 ALTER TABLE ONLY projects
     ADD CONSTRAINT proj_bk_uk UNIQUE (code, space_id);
+ALTER TABLE ONLY projects
+    ADD CONSTRAINT proj_pi_uk UNIQUE (perm_id);
 ALTER TABLE ONLY projects
     ADD CONSTRAINT proj_pk PRIMARY KEY (id);
 ALTER TABLE ONLY project_relationships_history