How to read the propertyentry database table in Jira

Still need help?

The Atlassian Community is here for you.

Ask the community

Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.

Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

 

Summary

The propertyentry database table stores a variety of data in Jira, from Issue Properties crucial to some features and apps (like Roadmaps Parent Link and Plans exclusion data) to system configs and app or plugin management.

This article aims at helping to read that table and join each property to the other tables where the actual property values are stored.


You may find the developer-oriented documentation useful, too:


Environment

Any version of Jira Software or Jira Service Management, both Data Center and Server.


Solution

Entity type and Property key distribution

You may learn the distribution of each property type and key through this query:

select 
  entity_name, 
  property_key, 
  count(id) 
from 
  entity_property 
/* where entity_name = 'IssueProperty' */ /* OPTIONAL FILTER */
group by
  entity_name, 
  property_key 
order by 
  3 desc, 2 asc;

It should output something like:

  ENTITY_NAME  |                PROPERTY_KEY                 | COUNT(ID)
---------------+---------------------------------------------+-----------
 IssueProperty |  sd.initial.field.set                       |   2919377
 IssueProperty |  jpo-issue-properties                       |   1680111
 IssueProperty |  jpo-exclude-from-plan                      |    199209
 IssueProperty |  request.channel.type                       |     70771
 IssueProperty |  request.public-activity.lastupdated        |     60789
 IssueProperty |  feedback.token.key                         |     36503
 IssueProperty |  service-request-feedback-comment           |      1761
 IssueProperty |  sd.kb.shared                               |       510
 IssueProperty |  codebarrel.automation.comment.action.6900  |       502

Corresponding property values

To obtain the respective property values, we need to make left joins to 6 other possible tables based on the value in the propertyentry.propertytype:

Value in propertytypeTable to join
1, 2, 3propertynumber
4propertydecimal
5propertystring
6propertytext
7propertydate
8, 9, 10, 11propertydata

Here's an example query:

select 
  p.id
  , p.entity_name
  , p.entity_id
  , p.property_key
  , p.propertytype
  , case
    when p.propertytype in (1, 2, 3) then concat('', n.propertyvalue)
	when p.propertytype = 4 then concat('', c.propertyvalue)
	when p.propertytype = 5 then concat('', s.propertyvalue)
	when p.propertytype = 6 then concat('', t.propertyvalue)
	when p.propertytype = 7 then concat('', d.propertyvalue)
	when p.propertytype in (8, 9, 10, 11) then concat('', x.propertyvalue)
	else '?'
  end as "propertyvalue"
from propertyentry p
  left join propertynumber n 
    on p.propertytype in (1, 2, 3) 
	  and n.id = p.id
  left join propertydecimal c 
    on p.propertytype in (4) 
	  and c.id = p.id
  left join propertystring s 
    on p.propertytype in (5) 
	  and s.id = p.id
  left join propertytext t 
    on p.propertytype in (6) 
	  and t.id = p.id
  left join propertydate d 
    on p.propertytype in (7) 
	  and d.id = p.id
  left join propertydata x 
    on p.propertytype in (8, 9, 10, 11) 
	  and x.id = p.id
where 
  lower(p.property_key) like lower('%...%') /* REPLACE SEARCH TERM HERE */
  OR lower(p.entity_name) like lower('%...%') /* REPLACE SEARCH TERM HERE, TOO */
order by
  p.property_key ASC;

It should output something like:

  id   |   entity_name   | entity_id |                            property_key                             | propertytype |     propertyvalue
-------+-----------------+-----------+---------------------------------------------------------------------+--------------+------------------------
 10810 | INSIGHT-GENERAL |         1 | com.atlassian.assets.dedicated.node.progress.writes.to.db.frequency |            2 | 100
 10808 | INSIGHT-GENERAL |         1 | com.atlassian.assets.index.object.load.attempts                     |            2 | 200
 10809 | INSIGHT-GENERAL |         1 | com.atlassian.assets.index.object.load.interval                     |            2 | 100
 10819 | INSIGHT-GENERAL |         1 | com.atlassian.assets.max.nodes.force.graph                          |            2 | 500
 10807 | INSIGHT-GENERAL |         1 | com.atlassian.assets.replication.batch.delay                        |            3 | 400
 10806 | INSIGHT-GENERAL |         1 | com.atlassian.assets.replication.batch.size                         |            2 | 1000
 10817 | INSIGHT-GENERAL |         1 | com.atlassian.assets.replication.dlq.logger.interval                |            3 | 300000

Last modified on Sep 16, 2024

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.