<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<database name="sreader" schema="public" type="PostgreSQL - 18.4 (Debian 18.4-1.pgdg13+1)">
   <tables>
      <table name="autopagerize_dataset" remarks="" schema="public" type="TABLE">
         <column autoUpdated="true" defaultValue="null" digits="0" id="0" name="id" nullable="false" remarks="" size="19" type="int8" typeCode="-5">
            <child column="dataset_id" foreignKey="autopagerize_rule_dataset_id_fkey" implied="false" onDeleteCascade="true" schema="public" table="autopagerize_rule"/>
            <child column="dataset_id" foreignKey="autopagerize_rule_rejection_dataset_id_fkey" implied="false" onDeleteCascade="true" schema="public" table="autopagerize_rule_rejection"/>
            <child column="active_dataset_id" foreignKey="autopagerize_state_active_dataset_id_fkey" implied="false" onDeleteCascade="false" schema="public" table="autopagerize_state"/>
            <child column="autopagerize_dataset_id" foreignKey="content_full_text_autopagerize_dataset_fkey" implied="false" onDeleteCascade="false" schema="public" table="content_full_text"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="1" name="format" nullable="false" remarks="" size="64" type="varchar" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="2" name="source_filename" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="3" name="source_uri" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="4" name="source_sha256" nullable="false" remarks="" size="64" type="bpchar" typeCode="1"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="5" name="importer_version" nullable="false" remarks="" size="10" type="int4" typeCode="4"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="6" name="imported_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="7" name="input_item_count" nullable="false" remarks="" size="10" type="int4" typeCode="4"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="8" name="accepted_rule_count" nullable="false" remarks="" size="10" type="int4" typeCode="4"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="9" name="rejected_rule_count" nullable="false" remarks="" size="10" type="int4" typeCode="4"/>
         <column autoUpdated="false" defaultValue="'{}'::jsonb" digits="0" id="10" name="metadata" nullable="false" remarks="" size="2147483647" type="jsonb" typeCode="1111"/>
         <primaryKey column="id" sequenceNumberInPK="1"/>
         <index name="autopagerize_dataset_pkey" unique="true">
            <column ascending="true" name="id"/>
         </index>
         <index name="autopagerize_dataset_identity_key" unique="true">
            <column ascending="true" name="format"/>
            <column ascending="true" name="source_sha256"/>
            <column ascending="true" name="importer_version"/>
         </index>
         <checkConstraint constraint="((input_item_count &gt;= 0) AND (accepted_rule_count &gt;= 0) AND (rejected_rule_count &gt;= 0) AND ((accepted_rule_count + rejected_rule_count) = input_item_count))" name="autopagerize_dataset_counts_check"/>
         <checkConstraint constraint="((format)::text = 'wedata-autopagerize-items-all'::text)" name="autopagerize_dataset_format_check"/>
         <checkConstraint constraint="(source_sha256 ~ '^[0-9a-f]{64}$'::text)" name="autopagerize_dataset_source_sha256_check"/>
      </table>
      <table name="autopagerize_rule" remarks="" schema="public" type="TABLE">
         <column autoUpdated="false" defaultValue="null" digits="0" id="0" name="dataset_id" nullable="false" remarks="" size="19" type="int8" typeCode="-5">
            <child column="autopagerize_dataset_id" foreignKey="content_full_text_autopagerize_rule_fkey" implied="false" onDeleteCascade="false" schema="public" table="content_full_text"/>
            <parent column="id" foreignKey="autopagerize_rule_dataset_id_fkey" implied="false" onDeleteCascade="true" schema="public" table="autopagerize_dataset"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="1" name="ordinal" nullable="false" remarks="" size="10" type="int4" typeCode="4">
            <child column="autopagerize_rule_ordinal" foreignKey="content_full_text_autopagerize_rule_fkey" implied="false" onDeleteCascade="false" schema="public" table="content_full_text"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="2" name="match_order" nullable="false" remarks="" size="10" type="int4" typeCode="4"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="3" name="external_id" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="4" name="resource_url" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="5" name="name" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="6" name="created_by" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="6" id="7" name="source_created_at" nullable="true" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="null" digits="6" id="8" name="source_updated_at" nullable="true" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="9" name="url_pattern" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="10" name="next_link_xpath" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="11" name="page_element_xpath" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="12" name="insert_before_xpath" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="13" name="example_url" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="14" name="raw_item" nullable="false" remarks="" size="2147483647" type="jsonb" typeCode="1111"/>
         <primaryKey column="dataset_id" sequenceNumberInPK="1"/>
         <primaryKey column="ordinal" sequenceNumberInPK="2"/>
         <index name="autopagerize_rule_pkey" unique="true">
            <column ascending="true" name="dataset_id"/>
            <column ascending="true" name="ordinal"/>
         </index>
         <index name="autopagerize_rule_match_order_key" unique="true">
            <column ascending="true" name="dataset_id"/>
            <column ascending="true" name="match_order"/>
         </index>
         <checkConstraint constraint="(match_order &gt;= 0)" name="autopagerize_rule_match_order_check"/>
         <checkConstraint constraint="(ordinal &gt;= 0)" name="autopagerize_rule_ordinal_check"/>
      </table>
      <table name="autopagerize_rule_rejection" remarks="" schema="public" type="TABLE">
         <column autoUpdated="false" defaultValue="null" digits="0" id="0" name="dataset_id" nullable="false" remarks="" size="19" type="int8" typeCode="-5">
            <parent column="id" foreignKey="autopagerize_rule_rejection_dataset_id_fkey" implied="false" onDeleteCascade="true" schema="public" table="autopagerize_dataset"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="1" name="ordinal" nullable="false" remarks="" size="10" type="int4" typeCode="4"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="2" name="name" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="3" name="raw_item" nullable="false" remarks="" size="2147483647" type="jsonb" typeCode="1111"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="4" name="errors" nullable="false" remarks="" size="2147483647" type="jsonb" typeCode="1111"/>
         <primaryKey column="dataset_id" sequenceNumberInPK="1"/>
         <primaryKey column="ordinal" sequenceNumberInPK="2"/>
         <index name="autopagerize_rule_rejection_pkey" unique="true">
            <column ascending="true" name="dataset_id"/>
            <column ascending="true" name="ordinal"/>
         </index>
         <checkConstraint constraint="(jsonb_typeof(errors) = ANY (ARRAY['array'::text, 'object'::text]))" name="autopagerize_rule_rejection_errors_shape_check"/>
         <checkConstraint constraint="(ordinal &gt;= 0)" name="autopagerize_rule_rejection_ordinal_check"/>
      </table>
      <table name="autopagerize_state" remarks="" schema="public" type="TABLE">
         <column autoUpdated="false" defaultValue="null" digits="0" id="0" name="id" nullable="false" remarks="" size="5" type="int2" typeCode="5"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="1" name="active_dataset_id" nullable="true" remarks="" size="19" type="int8" typeCode="-5">
            <parent column="id" foreignKey="autopagerize_state_active_dataset_id_fkey" implied="false" onDeleteCascade="false" schema="public" table="autopagerize_dataset"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="6" id="2" name="activated_at" nullable="true" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <primaryKey column="id" sequenceNumberInPK="1"/>
         <index name="autopagerize_state_pkey" unique="true">
            <column ascending="true" name="id"/>
         </index>
         <checkConstraint constraint="(id = 1)" name="autopagerize_state_singleton_check"/>
      </table>
      <table name="content_full_text" remarks="" schema="public" type="TABLE">
         <column autoUpdated="false" defaultValue="null" digits="0" id="0" name="id" nullable="false" remarks="" size="32" type="bpchar" typeCode="1">
            <child column="content_full_text_id" foreignKey="content_text_file_export_full_text_fkey" implied="false" onDeleteCascade="true" schema="public" table="content_text_file_export"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="1" name="content_header_id" nullable="false" remarks="" size="32" type="bpchar" typeCode="1">
            <parent column="id" foreignKey="content_full_text_content_header_fkey" implied="false" onDeleteCascade="true" schema="public" table="content_header"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="2" name="full_text" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="3" name="extracted_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="4" name="created_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="5" name="updated_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="6" name="extraction_method" nullable="true" remarks="" size="64" type="varchar" typeCode="12"/>
         <column autoUpdated="false" defaultValue="'success'::character varying" digits="0" id="7" name="extraction_status" nullable="false" remarks="" size="32" type="varchar" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="8" name="error_message" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="9" name="source_kind" nullable="true" remarks="" size="32" type="varchar" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="10" name="extracted_url" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="11" name="autopagerize_dataset_id" nullable="true" remarks="" size="19" type="int8" typeCode="-5">
            <parent column="dataset_id" foreignKey="content_full_text_autopagerize_rule_fkey" implied="false" onDeleteCascade="false" schema="public" table="autopagerize_rule"/>
            <parent column="id" foreignKey="content_full_text_autopagerize_dataset_fkey" implied="false" onDeleteCascade="false" schema="public" table="autopagerize_dataset"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="12" name="autopagerize_rule_ordinal" nullable="true" remarks="" size="10" type="int4" typeCode="4">
            <parent column="ordinal" foreignKey="content_full_text_autopagerize_rule_fkey" implied="false" onDeleteCascade="false" schema="public" table="autopagerize_rule"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="13" name="pagination_page_count" nullable="true" remarks="" size="10" type="int4" typeCode="4"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="14" name="pagination_stop_reason" nullable="true" remarks="" size="64" type="varchar" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="15" name="pagination_complete" nullable="true" remarks="" size="1" type="bool" typeCode="-7"/>
         <primaryKey column="id" sequenceNumberInPK="1"/>
         <index name="content_full_text_pkey" unique="true">
            <column ascending="true" name="id"/>
         </index>
         <index name="content_full_text_content_header_id_key" unique="true">
            <column ascending="true" name="content_header_id"/>
         </index>
         <checkConstraint constraint="((autopagerize_rule_ordinal IS NULL) OR (autopagerize_dataset_id IS NOT NULL))" name="content_full_text_autopagerize_rule_pair_check"/>
         <checkConstraint constraint="((pagination_page_count IS NULL) OR (pagination_page_count &gt;= 1))" name="content_full_text_pagination_page_count_check"/>
      </table>
      <table name="content_header" remarks="" schema="public" type="TABLE">
         <column autoUpdated="false" defaultValue="null" digits="0" id="0" name="id" nullable="false" remarks="" size="32" type="bpchar" typeCode="1">
            <child column="content_header_id" foreignKey="content_full_text_content_header_fkey" implied="false" onDeleteCascade="true" schema="public" table="content_full_text"/>
            <child column="content_header_id" foreignKey="content_text_file_export_header_fkey" implied="false" onDeleteCascade="true" schema="public" table="content_text_file_export"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="1" name="feed_url_id" nullable="false" remarks="" size="32" type="bpchar" typeCode="1">
            <parent column="id" foreignKey="content_header_feed_url_fkey" implied="false" onDeleteCascade="true" schema="public" table="feed_url"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="2" name="canonical_url" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="3" name="title" nullable="true" remarks="" size="1024" type="varchar" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="6" id="4" name="published_at" nullable="true" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="5" name="created_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="6" name="updated_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="7" name="feed_text" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="8" name="source_url" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="9" name="fetch_url" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <primaryKey column="id" sequenceNumberInPK="1"/>
         <index name="content_header_pkey" unique="true">
            <column ascending="true" name="id"/>
         </index>
         <index name="content_header_canonical_url_key" unique="true">
            <column ascending="true" name="canonical_url"/>
         </index>
         <index name="content_header_feed_url_id_idx" unique="false">
            <column ascending="true" name="feed_url_id"/>
         </index>
      </table>
      <table name="content_text_file_export" remarks="" schema="public" type="TABLE">
         <column autoUpdated="false" defaultValue="null" digits="0" id="0" name="content_header_id" nullable="false" remarks="" size="32" type="bpchar" typeCode="1">
            <parent column="id" foreignKey="content_text_file_export_header_fkey" implied="false" onDeleteCascade="true" schema="public" table="content_header"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="1" name="content_full_text_id" nullable="false" remarks="" size="32" type="bpchar" typeCode="1">
            <parent column="id" foreignKey="content_text_file_export_full_text_fkey" implied="false" onDeleteCascade="true" schema="public" table="content_full_text"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="2" name="relative_path" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="3" name="file_size_bytes" nullable="false" remarks="" size="19" type="int8" typeCode="-5"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="4" name="file_sha256" nullable="false" remarks="" size="64" type="bpchar" typeCode="1"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="5" name="exported_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="6" name="created_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="7" name="updated_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <primaryKey column="content_header_id" sequenceNumberInPK="1"/>
         <index name="content_text_file_export_pkey" unique="true">
            <column ascending="true" name="content_header_id"/>
         </index>
         <index name="content_text_file_export_exported_at_idx" unique="false">
            <column ascending="true" name="exported_at"/>
         </index>
         <index name="content_text_file_export_full_text_key" unique="true">
            <column ascending="true" name="content_full_text_id"/>
         </index>
         <index name="content_text_file_export_relative_path_key" unique="true">
            <column ascending="true" name="relative_path"/>
         </index>
         <checkConstraint constraint="(file_size_bytes &gt;= 0)" name="content_text_file_export_file_size_check"/>
         <checkConstraint constraint="(relative_path !~ '/'::text)" name="content_text_file_export_relative_path_no_directory_check"/>
         <checkConstraint constraint="(relative_path !~ '^/'::text)" name="content_text_file_export_relative_path_not_absolute_check"/>
         <checkConstraint constraint="(relative_path ~ '^[0-9a-f]{32}\.txt$'::text)" name="content_text_file_export_relative_path_txt_check"/>
      </table>
      <table name="eft_rules" remarks="" schema="public" type="TABLE">
         <column autoUpdated="false" defaultValue="null" digits="0" id="0" name="id" nullable="false" remarks="" size="32" type="bpchar" typeCode="1"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="1" name="url_pattern" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="2" name="extract_rule" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="3" name="created_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="4" name="updated_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <primaryKey column="id" sequenceNumberInPK="1"/>
         <index name="eft_rules_pkey" unique="true">
            <column ascending="true" name="id"/>
         </index>
         <index name="eft_rules_url_pattern_idx" unique="false">
            <column ascending="true" name="url_pattern"/>
         </index>
      </table>
      <table name="feed_url" remarks="" schema="public" type="TABLE">
         <column autoUpdated="false" defaultValue="null" digits="0" id="0" name="id" nullable="false" remarks="" size="32" type="bpchar" typeCode="1">
            <child column="feed_url_id" foreignKey="content_header_feed_url_fkey" implied="false" onDeleteCascade="true" schema="public" table="content_header"/>
         </column>
         <column autoUpdated="false" defaultValue="null" digits="0" id="1" name="url" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="2" name="created_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="now()" digits="6" id="3" name="updated_at" nullable="false" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="'active'::text" digits="0" id="4" name="status" nullable="false" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="5" name="unsubscribe_reason" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="null" digits="6" id="6" name="unsubscribed_at" nullable="true" remarks="" size="35" type="timestamptz" typeCode="93"/>
         <column autoUpdated="false" defaultValue="null" digits="0" id="7" name="note" nullable="true" remarks="" size="2147483647" type="text" typeCode="12"/>
         <column autoUpdated="false" defaultValue="'http'::character varying" digits="0" id="8" name="full_text_method" nullable="false" remarks="" size="64" type="varchar" typeCode="12"/>
         <primaryKey column="id" sequenceNumberInPK="1"/>
         <index name="feed_url_pkey" unique="true">
            <column ascending="true" name="id"/>
         </index>
         <index name="feed_url_url_key" unique="true">
            <column ascending="true" name="url"/>
         </index>
         <checkConstraint constraint="((full_text_method)::text = ANY ((ARRAY['feed'::character varying, 'http'::character varying, 'http_readability'::character varying, 'http_autopagerize'::character varying, 'http_autopagerize_readability'::character varying, 'playwright'::character varying, 'playwright_readability'::character varying, 'playwright_autopagerize'::character varying, 'playwright_autopagerize_readability'::character varying])::text[]))" name="feed_url_full_text_method_check"/>
         <checkConstraint constraint="(status = ANY (ARRAY['active'::text, 'unsubscribed'::text]))" name="feed_url_status_check"/>
         <checkConstraint constraint="((unsubscribe_reason IS NULL) OR (unsubscribe_reason = ANY (ARRAY['not_interested'::text, 'site_closed'::text, 'feed_dead'::text, 'moved'::text, 'other'::text])))" name="feed_url_unsubscribe_reason_check"/>
      </table>
   </tables>
</database>
