import { ChevronDown } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { useState } from 'react' import { useParams } from 'common' import ShimmeringLoader from 'components/ui/ShimmeringLoader' import { usePgBouncerStatus } from 'data/config/pgbouncer-enabled-query' import { useProjectSettingsQuery } from 'data/config/project-settings-query' import { usePoolingConfigurationQuery } from 'data/database/pooling-configuration-query' import { useDatabaseSelectorStateSnapshot } from 'state/database-selector' import { useDatabaseSettingsStateSnapshot } from 'state/database-settings' import { Badge, Button, Checkbox_Shadcn_, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Label_Shadcn_, Separator, } from 'ui' import { DropdownMenuRadioGroup, DropdownMenuRadioItem, } from 'ui/src/components/shadcn/ui/dropdown-menu' interface UsePoolerCheckboxInterface { id: string checked: boolean poolingMode: 'transaction' | 'session' ipv4AddonAdded: boolean onCheckedChange: (value: boolean) => void onSelectPoolingMode: (mode: 'transaction' | 'session') => void } export const UsePoolerCheckbox = ({ id, checked, poolingMode = 'transaction', ipv4AddonAdded, onCheckedChange, onSelectPoolingMode, }: UsePoolerCheckboxInterface) => { const router = useRouter() const [open, setOpen] = useState(false) const { ref: projectRef } = useParams() const snap = useDatabaseSettingsStateSnapshot() const state = useDatabaseSelectorStateSnapshot() const { data, isLoading, isSuccess } = usePoolingConfigurationQuery({ projectRef }) const { data: settings, isSuccess: isSuccessSettings } = useProjectSettingsQuery({ projectRef }) const { data: pgBouncerStatus } = usePgBouncerStatus({ projectRef: projectRef }) const isDatabaseSettingsPage = router.pathname.endsWith('/settings/database') const poolingConfiguration = data?.find((x) => x.identifier === state.selectedDatabaseId) const resolvesToIpV6 = settings?.project.db_ip_addr_config === 'ipv6' const onSelectOption = (value: 'session' | 'transaction') => { onSelectPoolingMode(value) setOpen(false) } return (
To use transaction mode, change the pool mode in the{' '} {isDatabaseSettingsPage ? ( { const el = document.getElementById('connection-pooler') if (el) { setOpen(false) el.scrollIntoView({ behavior: 'smooth', block: 'center', }) } }} > pooling configuration settings ) : ( pooling configuration settings )}{' '} to use transaction mode first.
You can then connect to session mode on port 5432 and transaction mode on port 6543.